4

我目前正在运行此代码。它将变量 $json 拆分到有 },{ 的位置,但它也删除了这些字符,但实际上我需要 json_decode 函数工作的尾括号和前括号。我创建了一个解决方法,但想知道是否有更优雅的解决方案?

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5},{"a":1,"b":2,"c":3,"d":4,"e":5}';
$individuals = preg_split('/},{/',$json);

$loop_count =1;
foreach($individuals as $object){
    if($loop_count == 1){$object .='}';}
    else{$object ="{".$object;}
    print_r(json_decode($object));
    echo '<br />';
$loop_count++;
}
?>

编辑: $json 变量实际上是作为 json 对象检索的。一个适当的例子是

[{"id":"foo","row":1,"col":1,"height":4,"width":5},{"id":"bar","row":2, "col":3,"height":4,"width":5}]

4

2 回答 2

4

正如您(大概)已经知道的那样,由于逗号和两个对象,您必须以开头的字符串不是有效的 json;它基本上是两个 json 字符串,它们之间有一个逗号。

您试图通过拆分它们来解决这个问题,但是有一种更简单的方法可以解决这个问题:

解决方法只是通过将字符串包装在方括号中来将其转换为有效的 JSON:

$json = '[' . $json . ']';

瞧。该字符串现在是有效的 json,只需一次调用即可成功解析json_decode().

希望有帮助。

于 2013-05-17T22:17:28.627 回答
0

您可以随时再次添加它们。尝试这个:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5},{"a":1,"b":2,"c":3,"d":4,"e":5}';
$individuals = preg_split('/},{/',$json);

foreach($individuals as $key=>$val)
   $individuals[$key] = '{'.$val.'}';
于 2013-05-17T22:19:54.307 回答