但是现在我想改善对带有多个对象的JSON字符串的解码,但我不知道该怎么做。
这是一个例子:
{ "inbox": [ { "firstName": "Brett", "lastName":"McLaughlin" }, { "firstName": "Jason", "lastName":"Hunter" }, { "firstName": "Elliotte", "lastName":"Harold" } ], "sent": [ { "firstName": "Isaac", "lastName": "Asimov" }, { "firstName": "Tad", "lastName": "Williams" }, { "firstName": "Frank", "lastName": "Peretti" } ], "draft": [ { "firstName": "Eric", "lastName": "Clapton" }, { "firstName": "Sergei", "lastName": "Rachmaninoff" } ] }
重新修改后的问题:foreach实际上适用于属性以及多值项(数组),请参见此处。例如,在您的问题中包含JSON字符串:
foreach
$data = json_decode($json); foreach ($data as $name => $value) { // This will loop three times: // $name = inbox // $name = sent // $name = draft // ...with $value as the value of that property }
在属性的主循环内,可以使用内部循环遍历每个属性指向的数组条目。因此,例如,如果您 知道 每个顶级属性都有一个数组值,并且每个数组条目都有一个“ firstName”属性,则此代码:
$data = json_decode($json); foreach ($data as $name => $value) { echo $name . ':' foreach ($value as $entry) { echo ' ' . $entry->firstName; } }
…将会呈现:
收件箱: 布雷特 杰森 艾略特 发送: 伊萨克 塔德 坦率 草案: 埃里克 谢尔盖
开始编辑 发表您的评论:
现在,我想知道如何使用几个对象解码JSON字符串!
您发布的示例 确实 有多个对象,它们都全部包含在一个包装对象中。这是JSON的要求;您不能(例如)执行以下操作:
{"name": "I'm the first object"}, {"name": "I'm the second object"}
该JSON无效。有 有 是一个顶级对象。它可能只包含一个数组:
{"objects": [ {"name": "I'm the first object"}, {"name": "I'm the second object"} ]}
…或者当然可以给各个对象起一个名字:
{ "obj0": {"name": "I'm the first object"}, "obj1": {"name": "I'm the second object"} }
结束编辑
您的示例是一个包含三个属性的对象,每个属性的值是一个对象数组。实际上,它与您链接的问题中的示例并没有太大区别(该示例也有一个对象,该对象的属性具有数组值)。
所以:
$data = json_decode($json); foreach ($data->programmers as $programmer) { // ...use $programmer for something... } foreach ($data->authors as $author) { // ...use $author for something... } foreach ($data->musicians as $musician) { // ...use $musician for something... }