当前位置: 首页 > Web前端 > HTML5

PHP解析JSON的解析

时间:2023-04-05 00:00:15 HTML5

最近接触到JSON文件类型,感觉很强大,效率很高,于是研究了一下,总结一下自己的理解。创建一个JSON文件,内容如下(内容为Hbuilder打开后的内容),可以看出内容嵌套了2组key→value组:{"FDB214F1":[{"item":"weight","description":"Weight1"},{"item":"Life","description":"Life1"},{"item":"Noise","description":"Noise1"}],"FDB04A2":[{"item":"Weight","description":"Weight2"},{"item":"Life","description":"Life2"},{"item":"Noise","description":"Noise2"}]}那么如何使用php语法来解析想要的内容呢?1.获取JSON文件内容";echo$json_string[6];?>结果如下:可以看到1.json_string获取源文件的原始内容2.json_string[6]获取内容的第六个字符,但是我尝试使用count($json_string)无法获取字符总数。2.解析内容";echo$json_array;echo"
";echo$json_array[0];echo"
";echo$json_array["FDB214F1"];?>程序输出:可以看到:1、其实json_array已经是json_string(源文件内容)的解析结果。每个{}都被视为一个数组数组。2、使用echo只能输出一个数组,并不能得到具体想要的内容,即使使用json_array[0]也没用。3、但是echo使用json_array["FDB214F1"]指定key值时,也可以得到数组。这个时候如果把json内容改成如下:{"FDB214F1":"FDB04A2"}然后执行上面的代码,可以得到:可以看到:1.这个时候我们得到了一个具体的值。两种情况分析,当最终点不是具体值时,得到数组,反之,当是具体值时,我们得到具体值。3.获取键值从上面的例子中,我们不禁想要抬高一个高度。如何获取所有键和所有值?例如json的内容如下:{"key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"}遍历代码如下:{echo$key."
";}foreach($json_arrayas$key=>$v){echo$v."
";}?>程序输出:可以看出:1.利用代码中的遍历格式,可以得到对应的key和value。更进一步,回到原来的例子:{"FDB214F1":[{"item":"weight","description":"weight1"},{"item":"lifetime","description":"lifetime1"},{"item":"Noise","description":"Noise1"}],"FDB04A2":[{"item":"Weight","description":"Weight2"},{"item":"Life","description":"Life2"},{"item":"Noise","description":"Noise2"}]}执行刚才的代码得到:我们可以看到我们得到了key,但是没有得到具体的值。这是因为这里的值是一个集合,而不是具体的值。这时候我们需要指定具体的内容:];foreach($json_array01as$key=>$v){echo$key."
";}foreach($json_array01as$key=>$v){echo$v."
";}?>程序输出:可以看到:1、指定了FDB214F1字段后,实际得到的是这样一个集合:Array([0]=>Array([item]=>weight[description]=>weight1)[1]=>Array([item]=>life[description]=>life1)[2]=>Array([item]=>noise[description]=>noise1))这个集合里没有具体的键,只有3个并行{...}。所以它的默认key是0,1,2。2.取不到具体的值,因为这里的值是一个集合,不是具体的值。于是再次优化代码:[0]作为$key=>$v){echo$key."
";}foreach($json_array01[0]作为$key=>$v){echo$v."
";}?>你可以得到:你可以看到:我们在第一个{}中得到了键和值。4、count值经过json_decode后,我们也可以得到对应的集合数。在上面代码的基础上增加:($json_array01[0]as$key=>$v){echo$key."
";}foreach($json_array01[0]as$key=>$v){echo$v."
";}echocount($json_array);echo"
";echocount($json_array01);?>我们可以得到对应的集合数:5.编码转码有时候需要输出的内容某种格式的json。这时候encode还是上面的例子,直接上传代码:”;echojson_encode($json_array01,JSON_UNESCAPED_UNICODE);回声“
”;echojson_encode($json_array01[0],JSON_UNESCAPED_UNICODE);?>程序输出: