PHP:读取数组中有多个对象并按对象拆分的JSON文件


PHP: Read JSON file with multiple objects in array and split by objects

我有一个文件,内容类似于:

[{"color":1,"blocks":[[{"id":64}]]},{"color":1,"blocks":[[{"id":64},{"id":64}],[{"id":1}]]},{"color":2,"blocks":[[{"id":64},{"id":64}],[{"id":1}]]}]

例如,上面的文件有3个带有元素的对象:颜色和块。我正在寻找一种简单的PHP方法,只输出文件中的一个对象。(移除外部[]-括号,并将一级{}-括号拆分为数组的不同元素或不同的字符串或其他内容)

结果应该是针对对象1

{"color":1,"blocks":[[{"id":64}]]} 

或针对对象2

{"color":1,"blocks":[[{"id":64},{"id":64}],[{"id":1}]]}

如何说PHP获取字符串并将其拆分为它可以找到的每个{"color"或使用第一级{}括号?

目前我正在使用$config=json_decode($file,true);,我的代码如下echo '{"color":'.$config[2]["color"].'"blocks"。。。但这太疯狂了——这个物体的元素太多了我需要一种像echo $config[2]那样输出{"color":2,"blocks":[[{"id":64},{"id":64}],[{"id":1}]]} 的方式

我试图将文件读取为字符串并使用爆炸符,但"},""color"作为分隔符不起作用,并且找不到有效的分隔符。

你做错了。您不输出json,而是提取子数组/对象,然后对其进行重新编码。例如

$foo = json_decode($your_json);
$temp = $foo['bar'][1]['baz']; // deep sub-data
echo json_encode($temp);

不需要子字符串操作/篡改。只需解码、提取、重新编码提取的部分。

解码然后编码:

$str = '[{"color":1,"blocks":[[{"id":64}]]},{"color":1,"blocks":[[{"id":64},{"id":64}],[{"id":1}]]},{"color":2,"blocks":[[{"id":64},{"id":64}],[{"id":1}]]}]';
$config = json_decode($str, true);
$json = json_encode($config[2]);
print $json;

这将打印您想要的内容。