如何在PHP中合并两个JSON字符串?

时间:2016-05-11 22:07:23

标签: php json

我有两个这样的JSON字符串:

 $json1 = '[ {"src":"1","order":"2"}, {"src":"10","order":"20"}, ... ]';

$json2 = '[ {"src":"4","order":"5"}, {"src":"6","order":"7"}, ... ]';

我正在尝试使用它来合并它们:

$images =  array_merge(json_decode($json1 ),json_decode($json2));

$json = '[';
    $comma = null;
    foreach($images as $image)
    {
        $comma = ',';
        $json .=      $comma.'{"src":"'.$image['src'].'","order":"'.$image['order'].'"}';
    }
    $json .= ']';
    echo $json;

但是我收到了这个错误:

  

错误:无法使用stdCLASS的对象类型..

我做错了什么?

4 个答案:

答案 0 :(得分:6)

当您调用json_decode时,您将其解码为对象。如果你想要它是一个数组,你必须做

$images =  array_merge(json_decode($json1, true), json_decode($json2, true));

有关json_decode的更多信息:
http://php.net/manual/en/function.json-decode.php

答案 1 :(得分:1)

制作时

foreach($images as $image)
{
    $comma = ',';
    $json .=      $comma.'{"src":"'.$image['src'].'","order":"'.$image['order'].'"}';
}

您需要更改:

foreach($images as $image)
{
    $json .=      $comma.'{"src":"'.$image->src.'","order":"'.$image->order.'"}';
    $comma = ',';
}

要访问对象的字段,您需要使用“ - >”运算符,如$ image-> src。
另外,第一个$逗号需要为null,因此我改变了foreach中行的顺序。

答案 2 :(得分:0)

问题在于您是在手动执行json_encode应该做的事情。这部分:

$images = array_merge(json_decode($json1), json_decode($json2));

很好。

json_decode中的单个array_merge将解码为对象数组,array_merge会将它们合并在一起。您不需要将它们解码为多维数组,以实现此目的。

要将其恢复为JSON,您不应该使用foreach循环并手动构建JSON。你得到的错误是,因为你是使用数组语法访问一个对象,但你可以用这个替换foreach循环来避免整个问题:

$json = json_encode($images);

事实上,整个事情可以在一行中完成:

$json = json_encode(array_merge(json_decode($json1), json_decode($json2)));

答案 3 :(得分:-1)

如果您绝对想将它用作数组,只需将其设置为一个数组即可。 这些对于在循环中设置对象属性非常有用,尤其是在类中。不过你的情况。

$json1 = '[ {"src":"1","order":"2"}, {"src":"10","order":"20"}]';
$json2 = '[ {"src":"4","order":"5"}, {"src":"6","order":"7"}]';
$images =  array_merge(json_decode($json1),json_decode($json2));    
$json = '[';
    $comma = null;
    foreach($images as $image)
    {
        $image=(array)$image;
        $comma = ',';
        $json .=      $comma.'{"src":"'.$image['src'].'","order":"'.$image['order'].'"}';
    }
    $json .= ']';