我有一个文件,内容类似于:
[{"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;
这将打印您想要的内容。