2013-05-17 162 views
4

我目前有此代码正在运行。它分裂了变量$ json,其中有},{但它也删除了这些字符,但实际上我需要json_decode函数的尾部和前导括号。我创建了一个解决方案,但想知道是否有更优雅的解决方案?PHP preg_split并替换

<?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}]

+0

如果你想使用JSON数据,你为什么不简单地使用PHP的JSON函数来获取它?您可以将字符串编码为JSOn对象并访问变量。 – tim

+0

是的,JSON_decode()适用于将JSON数据转换为可用的php对象(或者如果您设置参数,则为数组)。否则,您可能希望查看“被动”与regexp的匹配。 – CP510

+0

变量$ json被发送到这个文件。我为这个问题提供了一个硬编码的例子。看一下编辑和解释的问题。 – Somk

回答

4

由于你(大概)已经知道,由于逗号和两个对象,json无效;它基本上是两个json字符串,它们之间用逗号隔开。

你试图通过拆分他们解决这个问题,但有一个更容易解决这个问题的方法:

的解决办法是简单地通过在方括号包裹它把串入有效的JSON:

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

瞧。该字符串现在是有效的json,并将通过一次调用json_decode()成功解析。

希望有所帮助。

+0

谢谢你的工作,因为我完全不理解JSON。我仍然有兴趣知道是否有一个更优雅的解决方案来解决我提出的 – Somk

+0

问题更好的解决方案,当然,这将是修复原始系统 - 如果它发出无效的json,那么真正的问题在于结束,在一个理想的世界里,这是修复的地方,而不是在客户端。 – Spudley

+0

没有什么比这更“优雅”的修复它了。这是如此优雅。在处理破损的数据时,事情往往会很快变得不那么美观。 (你很幸运,我以前看过的输入比以前严重得多!) – Spudley

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.'}'; 
+0

这会破坏列表中的第一个和最后一个项目。 – Arjan