这是一个通用的参考问题和答案,涵盖了许多永无止境的“如何访问json中的数据?”问题。这里介绍了在php中解码json和访问结果的基本知识。
我有json:
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}
如何在php中解码并访问结果数据?
6条答案
按热度按时间plicqrtu1#
简介
首先你有一根绳子。json不是数组、对象或数据结构。json是一种基于文本的序列化格式,所以它是一个奇特的字符串,但仍然只是一个字符串。在php中使用
json_decode()
.你可能会发现:
标量:字符串、int、float和bools
空值(它自己的一种特殊类型)
复合类型:对象和数组。
这些东西可以用json编码。或者更准确地说,这些是可以用json编码的东西的php版本。
他们没什么特别的。它们不是“json对象”或“json数组”,你已经解码了json,现在你有了基本的日常php类型。
对象将是stdclass的示例,这是一个内置类,它只是一个泛型,在这里并不重要。
访问对象属性
访问其中一个对象的属性的方式与访问任何其他对象的公共非静态属性的方式相同,例如。
$object->property
.访问数组元素
您可以像访问任何其他数组一样访问其中一个数组的元素,例如。
$array[0]
.在它上面迭代
foreach
.光滑的
巧克力加糖
枫树
或者乱搞任何一个内置的数组函数。
访问嵌套项
对象的属性和数组的元素可能是更多的对象和/或数组-您可以像往常一样继续访问它们的属性和成员,例如。
$object->array[0]->etc
.将true作为第二个参数传递给json\u decode()
当您这样做时,您将得到关联数组,而不是对象-带有键字符串的数组。同样,您可以像往常一样访问其中的元素,例如。
$array['key']
.访问关联数组项
将json对象解码为关联php数组时,可以使用
foreach (array_expression as $key => $value)
语法,例如印刷品
键'foo'的值是'foo value'
键“bar”的值为“bar value”
“baz”键的值为“baz value”
不知道数据是如何组织的
阅读文档以了解json的来源。
看看json,你会看到大括号
{}
应该是一个对象,在这里你可以看到方括号[]
需要一个数组。用一个
print_r()
:并检查输出:
它将告诉您在哪里有对象,在哪里有数组,以及它们的成员的名称和值。
如果你在迷路之前只能走那么远,那就走那么远,用你的手去打它
print_r()
:在这个方便的交互式json浏览器中查看一下。
把问题分解成更容易理解的部分。
json\u decode()返回null
这是因为:
json完全由这些组成,
null
.json无效-请检查
json_last_error_msg
或者通过jsonlint之类的东西。它包含嵌套深度超过512层的元素。可以通过将整数作为第三个参数传递给
json_decode()
.如果你需要改变最大深度,你可能解决了错误的问题。找出为什么会得到如此深度嵌套的数据(例如,正在查询的生成json的服务有一个bug),并避免这种情况发生。
对象属性名称包含特殊字符
有时您会有一个对象属性名,其中包含类似连字符的内容
-
或在标志处@
不能在文本标识符中使用。相反,您可以在大括号中使用字符串文字来处理它。如果您有一个整数作为属性,请参阅:如何访问具有整数等名称的对象属性?作为参考。
有人把json放在你的json里了
这是荒谬的,但它发生了-有json编码为字符串在您的json。解码,像往常一样访问字符串,解码,最终得到你需要的。
数据无法放入内存
如果你的json太大了
json_decode()
马上处理事情开始变得棘手。请参见:用php处理大型json文件
如何正确地遍历一个大的json文件
如何排序
请参阅:reference:php中排序数组和数据的所有基本方法。
3okqufwl2#
可以使用json_decode()将json字符串转换为php对象/数组。
如。
输入:
输出:
需要记住的几点:
json_decode
要求字符串是有效的json
否则它会回来的NULL
.如果解码失败,
json_last_error()
可用于确定错误的确切性质。一定要进去
utf8
内容,或json_decode
可能会出错并返回NULL
价值观。vd2z7a6w3#
考虑使用
JSONPath
https://packagist.org/packages/flow/jsonpath对于如何使用它和解析json文件有一个非常清晰的解释,避免了所有提出的循环。如果你熟悉
XPath
为了XML
你会开始喜欢这种方法的。cx6n0qe34#
https://paiza.io/projects/x1qjjbka8mdo6ovh-j_63w
检查下面的代码,以便在中将json转换为数组
PHP
,如果json是正确的json_decode()
工作正常,并将返回一个数组,但如果json格式不正确,则返回NULL
,如果json格式不正确,并且只需要数组,则可以使用此函数,
如果json格式不正确,您希望停止代码执行,那么可以使用此函数,
你可以根据需要使用任何功能,
ohfgkhjo5#
sz81bmfz6#
我们可以使用php中的json解码函数将json字符串解码成数组
1) json\u decode($json\u string)//返回object
2) json\u decode($json\u string,true)//返回数组