0

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

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

另一个是这样的:

$arr_places = json_encode($xmlDoc);

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

4

5 回答 5

1

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

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

于 2012-10-25T09:54:11.630 回答
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);
    }
于 2013-10-02T12:06:37.940 回答
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 字符串合并为一个?

于 2015-04-03T08:36:41.480 回答
0

所以你应该先合并数组,然后使用json_encode.

$json = json_encode(array_merge($arr_data, $xmlDoc));
于 2012-10-25T09:52:49.620 回答
0

合并结果然后编码。

$arr_data = array('id'=>$country_id);
$res = array_merge( $arr_data, $xmlDoc );
$merged = json_encode($res);
于 2012-10-25T09:59:25.980 回答