在php中合并json对象

时间:2012-10-25 09:49:54

标签: json

如何在php中合并两个json对象 一个数组就像这样

$arr_data = array('id'=>$country_id);
    $arr = json_encode($arr_data);

另一个是这样的:

$arr_places = json_encode($xmlDoc);

现在我想将它们合并到一个json对象中。我怎么能这样做。

5 个答案:

答案 0 :(得分:1)

这在很大程度上取决于你所说的“合并”。只是一个简单的合并,或者你需要消除重复的属性?...等等。

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

答案 1 :(得分:0)

因此,您应首先合并数组,然后使用json_encode

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

答案 2 :(得分:0)

合并结果然后编码。

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

答案 3 :(得分:0)

这里的大多数答案都假设这是一个面对两个数组而不是对象的情况。 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);
    }

答案 4 :(得分:0)

上面提到的解决方案对我来说不适用于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无法解析它。令我惊讶的是,在结果字符串中,键在引号内。 (例如:"timestamp")。

任何人都可以告诉我代码有什么问题,或者如何将两个json字符串连接到一个?