关于PHP解析JSON的分析

最近接触到了JSON的文件类型,觉得很强大高效,所以研究了一下,总结一下自己的理解。
建立一个JSON文件,内容如下(该内容为Hbuilder打开后的内容),可以看出该内容嵌套了2组键→值组:

{
    "FDB214F1":[{"item":"重量","description":"重量1"},{"item":"寿命","description":"寿命1"},{"item":"噪音","description":"噪音1"}]
    ,"FDB04A2":[{"item":"重量","description":"重量2"},{"item":"寿命","description":"寿命2"},{"item":"噪音","description":"噪音2"}]
}

那么如何使用php语法解析想要的内容呢?


一、获取JSON文件内容

";
    echo $json_string[6];
?>

结果如下:
image.png
可以看到
1、json_string获取到源文件的原本内容
2、json_string[6]获取到该内容的第6个字符
但是本人试过用count($json_string)无法获取总的字符数量。


二、解析内容

";
echo $json_array;
echo "
"; echo $json_array[0]; echo "
"; echo $json_array["FDB214F1"]; ?>

程序输出:
image.png
可以看到:
1、实际上json_array已经是将json_string(源文件内容)解析后的结果。每个{}都被当做一个数组array。
2、用echo只能输出array,而得不到具体的想要的内容,即使用json_array[0]也是没有用的。
3、但echo用json_array["FDB214F1"]指定key值的时候也是可以得到array的。
这个时候如果将json内容更改为如下:

{
    "FDB214F1":"FDB04A2"
}

再执行上述代码可以得到:
关于PHP解析JSON的分析_第1张图片
可以看到:
1、这个时候我们得到了一个具体的值。两种情况分析可知,当最终指向不是具体值的时候,得到的就是array,反之是具体值的时候,我们就会得到具体的值。


三、获取键值
从上边的例子中我们不免想要提升一个高度,如何得到所有的键和所有的值呢?
举例json的内容如下:

{
    "key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"
}

遍历代码如下:

$v) {
    echo $key."
"; } foreach($json_array as $key=>$v) { echo $v."
"; } ?>

程序输出:
image.png
可以看出:
1、使用代码中的遍历格式,可以得到相应的键与值。
再进一步,回到最初的例子:

{
    "FDB214F1":[{"item":"重量","description":"重量1"},{"item":"寿命","description":"寿命1"},{"item":"噪音","description":"噪音1"}]
    ,"FDB04A2":[{"item":"重量","description":"重量2"},{"item":"寿命","description":"寿命2"},{"item":"噪音","description":"噪音2"}]
}

执行刚才的代码可以得到:
image.png
可以看出我们得到了键,但是得不到具体的值,这是因为之前说过的这里的值是一个集合,并不是一个具体的值。
这时我们就需要指定到具体的内容:

$v) {
echo $key."
"; } foreach($json_array01 as $key=>$v) { echo $v."
"; } ?>

程序输出:
image.png
可以看到:
1、指定了FDB214F1这个字段后,实际得到的是这样的一个集合:
Array ( [0] => Array ( [item] => 重量 [description] => 重量1 ) [1] => Array ( [item] => 寿命 [description] => 寿命1 ) [2] => Array ( [item] => 噪音 [description] => 噪音1 ) )
在这个集合里没有具体的键,只有并列的3个{...}。因此其默认键为0,1,2。
2、得不到具体的值,这是因为之前说过的这里的值是一个集合,并不是一个具体的值。
因此再优化一次代码:

$v) {
echo $key."
"; } foreach($json_array01[0] as $key=>$v) { echo $v."
"; } ?>

就可以得到:
image.png
可以看到:
我们得到了第一个{}中的键和值。


四、count值
在经过json_decode之后,我们也可以得到相应的集合数量了
在上面代码的基础上增加:

$v) {
echo $key."
"; } foreach($json_array01[0] as $key=>$v) { echo $v."
"; } echo count($json_array); echo "
"; echo count($json_array01); ?>

我们就可以得到相应的集合数量:
关于PHP解析JSON的分析_第2张图片


五、encode转码
有的时候需要将json的内容以一定的格式输出,这个时候就要用到encode
还是上边的例子,直接上代码:

";
            echo json_encode($json_array01,JSON_UNESCAPED_UNICODE);
            echo "
"; echo json_encode($json_array01[0],JSON_UNESCAPED_UNICODE); ?>

程序输出:
image.png

你可能感兴趣的:(html5,php,json)