美文网首页
PHP操作json小结

PHP操作json小结

作者: 旅行家John | 来源:发表于2017-01-02 15:20 被阅读591次

    Javascript 中可以用{}表示一个对象,用[]表示一个数组,如:

    var obj={"a":"v","b":"x"};//这表示变量obj是一个对象,它有两个属性:a和b,属性值分别是:v和x.

    var arr=["v","x"];//这表示变量arr是一个数组,它有两一元素,索引分别是0和1,值分别是:v和x.

    JSON其实就是这两种格式混合在一起来表示数据的逻辑结构的格式,其实JSON就是Javascript中对象和数组的混合体

    PHP提供的专门的函数来生成和解析JSON格式的数据,PHP解析出来的数据根原先Javascript的数据的意义一样,即 Javascript对象解析成PHP对象,Javascript数组解析成PHP数组

    PHP生成JSON的函数是:json_encode($PHPcode);

    PHP解析JSON的函数是:json_decode($JSONcode);

    所以JSON的形式有多种,不同的形式在PHP解释出来后的形式也是不同的。

    //形式1:完全是对象的形式,这种形式的数据在Javascript中又叫相关数组,与一般数组不同的是,它可以通过字符串作索引来访问(用“[]”或 “.”来表示层级)

    $json='{"item1":{"item11":{"n":"chenling","m":"llll"},"sex":" 男","age":"25"},"item2":{"item21":"ling","sex":"女","age":"24"}}';

    $J=json_decode($json);

    print_r($J);

    将输出:

    stdClass Object

    (

    [item1] => stdClass Object

    (

    [item11] => stdClass Object

    (

    [n] => chenling

    [m] => llll

    )

    [sex] => 男

    [age] => 25

    )

    [item2] => stdClass Object

    (

    [item21] => ling

    [sex] => 女

    [age] => 24

    )

    )

    比如说我要取得了值是chenling的那个属性,则应该这样访问:

    $J->item1->item11->n;//这将取得属性n的值:chenling

    其实这种访问形式跟访问普通的对象属性差不多,也相当于访问一个3维数组。

    //形式2:对象和数组混合

    $json='{"item1":[{"name":[{"chen":"chenling","ling":"chenli"}],"sex":" 男","age":"25"},{"name":"sun","sex":"女","age":"24"}]}';

    $J=json_decode($json);

    print_r($J);

    将输出:

    stdClass Object

    (

    [item1] => Array

    (

    [0] => stdClass Object

    (

    [name] => Array

    (

    [0] => stdClass Object

    (

    [chen] => chenling

    [ling] => chenli

    )

    )

    [sex] => 男

    [age] => 25

    )

    [1] => stdClass Object

    (

    [name] => sun

    [sex] => 女

    [age] => 24

    )

    )

    )

    比如说我要取得了值是chenling的那个元素,则应该这样访问:

    $J->item1[0]->name[0]->chen;//这将取得元素chen的值:chenling

    其实这种访问形式结合了对象和数组的访问方式,也相当于访问一个5维数组。

    //形式3:完全数组形式

    $json='[["item1","item11"],["n","chenling"],["m","llll"]]';

    $J=json_decode($json);

    print_r($J);

    将输出:

    Array

    (

    [0] => Array

    (

    [0] => item1

    [1] => item11

    )

    [1] => Array

    (

    [0] => n

    [1] => chenling

    )

    [2] => Array

    (

    [0] => m

    [1] => llll

    )

    )

    比如说我要取得了值是chenling的那个元素,则应该这样访问:

    $J[1][1];//这将取得元素值chenling的那个元素

    但是用这种方式有一个缺点,就是无法用字符串作为索引,只能用数字,用完全对象的形式可以解决这个问题

    其实这种访问形式就是数组的访问方式,相当于访问一个2维数组。

    小结:

    从上面的例子可以看出JSON有点类似XML,也可以在PHP和Javascript之间传递带结构的数据,使用起来很方便。

    需要注意的是每个属性和属性值都由引号""包括起来。

    json_decode是php5.2.0之后新增的一个PHP内置函数,其作用是对JSON 格式的字符串进行编码.

    json_decode的语法规则:json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

    json_decode接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 ,当该参数$assoc为 TRUE 时,将返回 array 否则返回 object 。

    JSON 格式的字符串

    $json = '{"a":"php","b":"mysql","c":3}';

    其中a为键,php为a的键值。

    我们来看一个实例:

    1

    2$json='{"a":"php","b":"mysql","c":3}';

    3$json_Class=json_decode($json);

    4$json_Array=json_decode($json, true);

    5print_r($json_Class);

    6print_r($json_Array);

    7

    8?>

    程序输出:

    stdClass Object (

    [a] => php

    [b] => mysql

    [c] => 3 )

    Array (

    [a] => php

    [b] => mysql

    [c] => 3 )

    在上面代码的前提下

    访问对象类型$json_Class的a的值

    1echo$json_Class->{'a'};

    程序输出:php

    访问数组类型$json_Array的a的值

    1echo$json_Array['a'];

    程序输出:php

    相关文章

      网友评论

          本文标题:PHP操作json小结

          本文链接:https://www.haomeiwen.com/subject/atvwvttx.html