php如何读取json中的数据?

记得上次在公司加班到半夜,对着电脑屏幕调试代码,就是这样一个json字符串。
那时候手一抖,差点把引号给漏了。

php <?php $jsonData = '{"key": "value"}'; $test = json_decode($jsonData); echo $test->key; ?>
运行这段代码,屏幕上会直接印出value。
这就是json_decode的魔力,把字符串变成我们能直接用的变量。
不过,等一下,我刚才调试的时候,发现如果json格式错了,比如少了个引号,或者key拼写错了,它不会像explode那样给出明确的错误,而是直接返回null。
那次我差点没发现,还好同事提醒了我。

等等,还有个事,我试过用json_decode($jsonData, true),第二个参数是true的时候,它返回的是数组而不是对象。
那天我切换了好几次,为了看打印出来的到底是对象还是数组,还挺有意思的。

你有没有遇到过json格式特别复杂,解析的时候卡壳的情况?

深入理解PHP数组中JSON字符串的解析与数据提取

我后来才反应过来,这个例子挺具体的。
2 02 2 年的时候,我碰到过一个项目,在上海,数据量不大,也就几百条,但每个元素里都是 JSON 字符串。
当时我也懵,为啥不直接存为数组。
可能我偏激,觉得这样存取麻烦。
但后来发现,人家可能是为了减少数据库存储量,或者 API 返回就是这种格式。
所以,就得解析。

PHP如何从JSON字符串中提取指定的值?

哎,跟你讲讲我当年踩过的坑,这事儿吧,真挺实际的。

前年我在武汉搞项目,有个API返回JSON字符串,得从中取个URL出来。
一开始我挺懵的,不知道咋弄。
后来琢磨明白了,得用json_decode()函数。

你看啊,你那个JSON字符串,得用json_decode($jsonString, true)解码。
第二个参数是true的时候,返回关联数组,省略或者设为false,就返回对象。
我当时就是设成true,好操作。

解码完,你那个数据就变成数组了。
然后你就根据JSON的结构,一层一层地找。
比如你那个例子,$decodedData['item'][0]['content']['news_item'][0]['url'],你就这么一层一层地挖。
如果数组嵌套了,你就得加索引,比如[0]。

我当时就是搞这么个事:$url = $decodedData['item'][0]['content']['news_item'][0]['url'];,最后输出那个URL。
你看,就这么简单。

不过要注意啊,索引和键名得匹配,大小写都得对。
我有个同事,就因为大小写不对,找了半天,最后发现是这事儿。
还有,访问不存在的键会返回null或者触发Undefined index错误,你得用isset()或者空合并运算符()来避免这种错误。
我当时就是用,写了个$url = $decodedData['item'][0]['content']['news_item'][0]['url'] '默认URL';,这样就不会出错。

最坑的是,有时候JSON格式不对,解码会失败。
我前年有个项目,就是JSON格式错误,解码返回null。
我花了半天时间,最后用在线JSON验证工具检查,才发现是少了个引号。
真是头疼。

所以啊,你用json_decode()解码后,一定要用json_last_error()检查一下,看看有没有错误。
如果错了,就用json_last_error_msg()获取具体错误信息。

总之啊,从JSON字符串中提取指定值,就是这么个道理。
多练练,很快就掌握了。