JSON 知识量:10 - 17 - 48
对于JSON数据的操作,简单来说就是序列化与反序列化。一种数据交互格式要想在Web领域适用,就必须同时被客户端和服务端支持。JSON就可以在大部分服务端Web框架以及脚本语言中得到较好的支持。支持JSON的常用的编程语言有ASP.NET、PHP、Ruby on Rails、Node.js和Java等。
ASP.NET是由微软开发的服务端Web框架。它通过扩展允许开发人员使用一些不同的编程模型,例如ASP.NET MVC和ASP.NET Web API。此外,ASP.NET使用公共语言运行库(CLR),允许开发人员使用任何受CLR支持的语言来编写代码,例如:C#、F#、VB.NET等。在ASP.NET中通过第三方库来支持JSON,最流行的是Json.NET。
1、使用ASP.NET操作JSON。
以下是一个示例。首先创建一个用于操作的JSON对象:
public class Cars{ public string carName{get;set} public string carNumber{get;set} public string carColor{get;set} public Size carSize{get;set} } public class Size{ public string length{get;set} public string width{get;set} public string height{get;set}
新建一个对象来保存名为BMW的信息,最后使用Json.NET将对象序列化为JSON:
Cars BMW = new Cars(); BMW.carName = "BMW5"; BMW.carNumber = "G30"; BMW.carColor = "white"; Size BMW5Size = new Size(); BMW5Size.lenth = "5000"; BMW5Size.width = "2000"; BMW5Size.height = "1650"; BMW.carSize = BMW5Size; string json = JsonConvert.SerializeObject(BMW);
序列化后的BMW对象为:
{ "carName": "BMW5", "carNumber": "G30", "carColor": "white", "carSize": { "length": "5000", "width ": "2000", "height ": "1650" } }
仅需要一行代码就可以将JSON反序列化为ASP.NET对象:
Cars BMW = JsonConvert.DeserializeObject<BMW>(json);
Json.NET允许将JSON反序列化为指定类型的对象,这样就能保证数据在出入服务端代码时保持自己原有的形态。需要注意的是,对象的属性名必须和JSON文档中的键值对的名称相吻合,否则,反序列化操作就会失败。
2、使用ASP.NET请求JSON数据。
可以通过ASP.NET中内置的System.Net.WebClient类来创建HTTP请求,通过调用DownloadString方法下载URL请求的资源,资源类型为字符串。例如从本地CouchDB数据库请求JSON数据:
using(var webClient = new WebClient()) { string json = webClient.DownloadString("456456ac4654354f486543544"); }
获取的JOSN资源类似于以下内容:
{ "_id": "998456ac4654354f486543544", "_rev": "1-3e2466435464545468546468", "firstName": "John", "lastName": "James", "address": { "street": "552 sweet st", "city": "Forks", "state": "OR", "zip": "58942" }, "age": 48, "gender": "male", "famous": false }
PHP是一种用于创建动态Web页面的服务端脚本语言。使用PHP时,可以直接将其代码嵌入HTML文档中。例如:
<html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <?php echo"Hello pnotes.cn!"; ?> </body> </html>
此外,PHP还支持对象数据类型,例如定义一个Car的数据类:
class Car { public $name; public $number; public $color; }
下面对其实例化,并赋值:
$BMW = new Car(); $BMW->name = "BMW"; $BMW->number = "56897"; $BMW->color = "white"; echo $BMW->name;
运行后,页面会输出:“BMW”。
PHP对JSON的序列化和反序列化操作也有内置的支持,在PHP中称为JSON的编码与解码。对某样东西进行编码的意思就是将其转为一种编码格式(即不可读的形式)。使用PHP序列化JSON时应调用json_encode函数,反序列化时应调用json_decode函数。
1、序列化JSON
将以上Car类的实例$BMW序列化:
$json = json_encode($BMW);
json_encode函数返回的结果为:
{ "name": "BMW", "number": "56897", "color": "white" }
2、反序列化JSON
PHP的json_decode函数用于反序列化JSON,但是并不支持将JSON反序列化为某种具体的PHP对象,所以,需要采取一些措施将数据重塑为对应的PHP对象。
首先,在类Car中添加一个函数loadFormJSON,用于通过JSON数据设置自己的属性。
class Car { public $name; public $number; public $color; public function loadFormJSON($json) { $object = json_decode($json); foreach ($object as $name => $value) { $this->{$name} = $value; } } }
然后,创建新的Car对象,并调用loadFormJSON函数。
$json = json_encode($BMW); $deserializedCar = new Car(); $deserializedCar->loadFormJSON($json); echo $deserializedCar->name . " " . $deserializedCar->number . " " . $deserializedCar->color;
以上代码中,首先序列化JOSN数据为$json,然后创建了新的Car对象$deserializedCar,使用$deserializedCar的loadFormJSON函数,将JSON数据中的内容赋值给$deserializedCar的属性,最后将属性值打印出来。
3、请求JSON。
使用PHP内置的file_get_contents函数来创建HTTP请求。它将资源以字符串的形式返回,然后就可以将字符串反序列化为PHP对象。示例:从本地CouchDB数据库请求JSON数据并反序列化。
$url = "http//localhost:5984/cars/4564812546412215"; $json = file_get_contents($url); $deserializedCar = new Car(); $deserializedCar->loadFormJSON($json); echo $deserializedCar->name . " " . $deserializedCar->number . " " . $deserializedCar->color;
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6