0

配列の1つがこのようなものであるphpで2つのjsonオブジェクトをマージするにはどうすればよいですか

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

もう1つは次のようなものです:

$arr_places = json_encode($xmlDoc);

今、それらを単一の json オブジェクトにマージしたいと考えています。これどうやってするの。

4

5 に答える 5

1

それはあなたが「マージ」によって何を意味するかに大きく依存します。単純なマージ、または重複した属性を削除する必要がありますか?...など。

最も簡単な方法は、xdazzが述べたものと同じです。

于 2012-10-25T09:54:11.630 に答える
0

ここでの回答のほとんどは、これがオブジェクトではなく 2 つの配列に直面している場合であると想定しています。OP は、2 つのオブジェクトを 1 つの JSON にマージすることについて質問していました。

これには多くの解決策がありますが、さらに一歩進んで、オブジェクトを JSON 文字列に変換し、連想配列に戻し、JSON に戻すことで、実際にオブジェクトを 1 つの 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文字列に追加して、そこから1つの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",
}

代わりに、1 つの json 文字列が必要です。Firefox はそれを解析できません。驚いたことに、結果の文字列ではキーが引用符で囲まれています。(例: "timestamp")。

コードの何が問題なのか、2 つの json 文字列を 1 つに結合する方法を教えてもらえますか?

于 2015-04-03T08:36:41.480 に答える
0

結果をマージしてからエンコードします。

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

したがって、最初に配列をマージしてから使用する必要がありますjson_encode

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