JSON 学习笔记 使用php

来源:互联网 发布:太祖 知乎 编辑:程序博客网 时间:2024/06/05 07:06

最近在写一个微信的公众平台,在调用有道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

0 0
原创粉丝点击