配列の1つがこのようなものであるphpで2つのjsonオブジェクトをマージするにはどうすればよいですか
$arr_data = array('id'=>$country_id);
$arr = json_encode($arr_data);
もう1つは次のようなものです:
$arr_places = json_encode($xmlDoc);
今、それらを単一の json オブジェクトにマージしたいと考えています。これどうやってするの。
配列の1つがこのようなものであるphpで2つのjsonオブジェクトをマージするにはどうすればよいですか
$arr_data = array('id'=>$country_id);
$arr = json_encode($arr_data);
もう1つは次のようなものです:
$arr_places = json_encode($xmlDoc);
今、それらを単一の json オブジェクトにマージしたいと考えています。これどうやってするの。
それはあなたが「マージ」によって何を意味するかに大きく依存します。単純なマージ、または重複した属性を削除する必要がありますか?...など。
最も簡単な方法は、xdazzが述べたものと同じです。
ここでの回答のほとんどは、これがオブジェクトではなく 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);
}
上記の解決策は、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 つに結合する方法を教えてもらえますか?
結果をマージしてからエンコードします。
$arr_data = array('id'=>$country_id);
$res = array_merge( $arr_data, $xmlDoc );
$merged = json_encode($res);
したがって、最初に配列をマージしてから使用する必要がありますjson_encode
。
$json = json_encode(array_merge($arr_data, $xmlDoc));