最近在写一个微信的公众平台,在调用有道API的时候,可以选用3种方式,选择使用自己熟悉的XML格式进行数据解析,XML采用树型结构存储信息,按照树的深度,可以访问到相应的数据。而在调用大众点评API的时候,发现默认使用JSON,以前简单地使用过JSON,但并没有系统的学习,才有了这一篇学习笔记。
JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。先来个事例看一下JSON的样式。
==举例==
<span style="font-size:18px;">
{
"firstName": "John",
"lastName": "Smith",
{
"streetAddress": "21 2nd Street",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
</span>
从事例中可以看到,JSON格式有以下特点:
1:并列的数据用“,”隔开
2:键值对使用“ :” 对应
3:多组键值对使用“{ }”包含
4:并列数据的集合(数组)用方括号"[ ]"表示
5:键与值均使用双引号包含
======php 使用json数据========
通过php使用json主要有4个函数,参考链接:http://cn2.php.net/json。 使用php的curl库从大众点评API获得来的数据,利用 json_decode( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] ) 第一个参数为json原始字符串。第二个参数,若为true,则函数将string类型的json数据转换成php的array()。第三个参数,用户可以规定遍历深度,默认512。第四个参数不写,表示默认会将large int 转换为float类型,php目前仅支持JSON_BIGINT_AS_STRING 。 这样使用这个函数时,可以直接用访问数组的方式访问数据。
举例1:
<span style="font-size:18px;"><?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json, true));
?></span>
输出:
<span style="font-size:18px;">array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}</span>
举例2:
<span style="font-size:18px;"><?php
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'};
?></span>
输出
12345
举例3:
<span style="font-size:18px;">{
"status": "OK",
"count": 3,
"reviews": [
{
"review_id": 49302627,
"user_nickname": "HcjTT1314",
"created_time": "2013-11-27 23:56",
"text_excerpt": "<strong><span style="color:#3333ff;">外婆家的性价比和味道,吃过的都知道没什么好说的。</span></strong>", !!!!!!!(此处为蓝色)
"review_rating": 5,
"rating_img_url": "http://i3.dpfile.com/s/i/app/api/32_5star.png",
"rating_s_img_url": "http://i2.dpfile.com/s/i/app/api/16_5star.png",
"product_rating": 3,
"decoration_rating": 4,
"service_rating": 3,
"review_url": "http://dpurl.cn/p/tn-RH4CDWq"
},
{
"review_id": 49302262,
"user_nickname": "附庸风雅之人",
"created_time": "2013-11-27 23:45",
"text_excerpt": "非常不错的一家店 平时来基本不用怎么排队 奥义就是便宜。 现在这种物价",
"review_rating": 5,
"rating_img_url": "http://i3.dpfile.com/s/i/app/api/32_5star.png",
"rating_s_img_url": "http://i1.dpfile.com/s/i/app/api/16_5star.png",
"product_rating": 4,
"decoration_rating": 4,
"service_rating": 4,
"review_url": "http://dpurl.cn/p/8SyN1cZJKf"
},
{
"review_id": 49301850,
"user_nickname": "joyboa",
"created_time": "2013-11-27 23:34",
"text_excerpt": "酒酿圆子不是很甜〜还行〜中午生意真是好啊〜人一多,略感有点吵…",
"review_rating": 5,
"rating_img_url": "http://i1.dpfile.com/s/i/app/api/32_5star.png",
"rating_s_img_url": "http://i1.dpfile.com/s/i/app/api/16_5star.png",
"product_rating": 4,
"decoration_rating": 4,
"service_rating": 4,
"review_url": "http://dpurl.cn/p/9s7WHMznvm"
}
],
"additional_info": {
"more_reviews_url": "<span style="color:#ff0000;">http://dpurl.cn/p/84VMxE5Ots</span>" !!!!!!!!(此处为红色)
}
}</span>
$data = json_decode(curl_exec($curl), true);
访问上方红色数据,则使用 $dazhongData['additional_info']['more_reviews_url'], 分别访问名称为additional_info对应的值,再进一步访问其中名为more_reviews_url对应的值,这样就取到了这个url地址。
同样的,要想访问蓝色标记的数据(评论内容),可以这样访问,原理相同。$data['reviews'][0]['text_excerpt']。
以上是对于使用json的一些学习过程,总的来说json作为纯文本的数据传输格式,可以直接读代码就可以理解内容,这样确实很方便。还有很多学习内容,以后慢慢补充上,欢迎各位指正其中错误。
推荐资料:
阮一峰的日志 http://www.ruanyifeng.com/blog/2009/05/data_types_and_json.html