在php中合并json对象

在php中合并json对象,json,Json,如何在php中合并两个json对象 其中一个数组是这样的 $arr_data = array('id'=>$country_id); $arr = json_encode($arr_data); 另一个是这样的: $arr_places = json_encode($xmlDoc); 现在我想把它们合并成一个json对象。我怎样才能做到这一点。因此您应该先合并数组,然后使用json\u encode $json = json_encode(array_merge($arr_da

如何在php中合并两个json对象 其中一个数组是这样的

$arr_data = array('id'=>$country_id);
    $arr = json_encode($arr_data);
另一个是这样的:

$arr_places = json_encode($xmlDoc);

现在我想把它们合并成一个json对象。我怎样才能做到这一点。

因此您应该先合并数组,然后使用
json\u encode

$json = json_encode(array_merge($arr_data, $xmlDoc));

这在很大程度上取决于你所说的“合并”是什么意思。只是简单的合并,否则您需要消除重复的属性?…等等


最简单的方法就像xdazz提到的那样。

合并结果,然后编码

$arr_data = array('id'=>$country_id);
$res = array_merge( $arr_data, $xmlDoc );
$merged = json_encode($res);

这里的大多数答案都假设在这种情况下,一个人面对的是两个数组,而不是对象。OP询问将两个对象合并为一个JSON

虽然有很多解决方案,但我有一个更进一步的技巧,通过将对象转换为JSON字符串,然后再转换回关联数组,然后再转换回JSON,将对象合并成单个JSON字符串

可能是效率失败,但工作是否成功:-)下面是一个代码示例:

    /**
     * Merges two objects into a single JSON structure
     * @param object $obj1
     * @param object $obj2
     * @return string the resuling JSON string
     */
    function mergeToJSON($obj1, $obj2) {
        $json1 = json_encode($obj1);
        $json2 = json_encode($obj2);
        if ($json1 === FALSE OR $json2 === FALSE) {
            return "";
        }
        $array1 = json_decode($json1, TRUE);
        $array2 = json_decode($json2, TRUE);
        $data = array_merge($array1, $array2);
        return json_encode($data);
    }

上面提到的解决方案在PHP版本5.5.12中不适用

简而言之,我想附加到json字符串中,并从中形成一个json字符串,如下所述:

$str1 = {
    timestamp: "2015-04-03T08:08:51+00:00",
    user: "admin",
    src_ip: "127.0.0.1"
}

$str2 =  {
    timestamp: "2015-04-03T08:08:51+00:00",
    user: "Peter_x",
    src_ip: "127.0.0.1"
}

$value1 = json_decode ($str1, TRUE);
$value2 = json_decode ($str2, TRUE);
$combined = array_merge ($value1, $value2);
$combined_json = json_encode ($combined);
file_put_contents("c:\outputfile", $combined_json, FILE_APPEND);
结果是:

{
    "timestamp": "2015-04-03T08:08:51+00:00",
    "user": "admin",
    "src_ip": "127.0.0.1",
}
{
    "timestamp": "2015-04-03T08:08:51+00:00",
    "user": "Peter_x",
    "src_ip": "127.0.0.1",
}
相反,我希望只有一个json字符串。Firefox无法解析它。令我惊讶的是,结果字符串中的键都在引号内。(例如:
“时间戳”


有谁能告诉我代码有什么问题,或者如何将两个json字符串合并为一个?

$xmlDoc是一个simpleDOM Objectplus:如果可以重载,可以使用
array\u merge\u recursive