我如何在 php 中合并两个 json 对象,其中一个数组是这样的
$arr_data = array('id'=>$country_id);
$arr = json_encode($arr_data);
另一个是这样的:
$arr_places = json_encode($xmlDoc);
现在我想将它们合并到一个 json 对象中。我怎样才能做到这一点。
我如何在 php 中合并两个 json 对象,其中一个数组是这样的
$arr_data = array('id'=>$country_id);
$arr = json_encode($arr_data);
另一个是这样的:
$arr_places = json_encode($xmlDoc);
现在我想将它们合并到一个 json 对象中。我怎样才能做到这一点。
这在很大程度上取决于您所说的“合并”是什么意思。只是一个简单的合并,或者你需要消除重复的属性?...等等。
最简单的方法就像 xdazz 提到的那样。
这里的大多数答案都假设这是一个面对两个数组而不是对象的情况。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 无法解析它。令我惊讶的是,在结果字符串中,键在引号内。(例如:) "timestamp"
。
谁能告诉我代码有什么问题或如何将两个 json 字符串合并为一个?
所以你应该先合并数组,然后使用json_encode
.
$json = json_encode(array_merge($arr_data, $xmlDoc));
合并结果然后编码。
$arr_data = array('id'=>$country_id);
$res = array_merge( $arr_data, $xmlDoc );
$merged = json_encode($res);