在 PHP 中合并两个 json

2022-08-30 16:53:57

我有两个json的

第一个是

    [{"COLUMN_NAME":"ORDER_NO","COLUMN_TITLE":"Order Number"}
,{"COLUMN_NAME":"CUSTOMER_NO","COLUMN_TITLE":"Customer Number"}]

第二个是

[{"COLUMN_NAME":"ORDER_NO","DEFAULT_VALUE":"1521"},
{"COLUMN_NAME":"CUSTOMER_NO","DEFAULT_VALUEE":"C1435"}]

我想合并它们并有一个json,就像

[{"COLUMN_NAME":"ORDER_NO","COLUMN_TITLE":"Order Number","DEFAULT_VALUE":"1521"}
,{"COLUMN_NAME":"CUSTOMER_NO","COLUMN_TITLE":"Customer Number","DEFAULT_VALUEE":"C1435"}]

有没有办法合并它们?如果需要更改JSON的结构,对我来说也是可以的

谢谢。


答案 1

像这样的东西应该工作:

json_encode(
    array_merge(
        json_decode($a, true),
        json_decode($b, true)
    )
)

或与单行相同:

json_encode(array_merge(json_decode($a, true),json_decode($b, true)))

官方 PHP 文档中的array_merge

官方 PHP 文档中的json_decode

编辑:尝试添加为json_decode的第二个参数。这会将对象转换为关联数组。true

编辑2:尝试在下面查看我的评论。很抱歉,现在必须注销:(这看起来像是一个完全正确的解决方案:https://stackoverflow.com/a/20286594/1466341array-merge-recursive


答案 2

设法把这个放在一起。很可能有更好的解决方案,但这是我得到的最接近的。

$a = '[{"COLUMN_NAME":"ORDER_NO","COLUMN_TITLE":"Order Number"},{"COLUMN_NAME":"CUSTOMER_NO","COLUMN_TITLE":"Customer Number"}]';
$b = '[{"COLUMN_NAME":"ORDER_NO","DEFAULT_VALUE":"1521"},{"COLUMN_NAME":"CUSTOMER_NO","DEFAULT_VALUEE":"C1435"}]';
$r = [];
foreach(json_decode($a, true) as $key => $array){
 $r[$key] = array_merge(json_decode($b, true)[$key],$array);
}
echo json_encode($r);

返回

[{"COLUMN_NAME":"ORDER_NO","DEFAULT_VALUE":"1521","COLUMN_TITLE":"Order Number"},
{"COLUMN_NAME":"CUSTOMER_NO","DEFAULT_VALUEE":"C1435","COLUMN_TITLE":"Customer Number"}]

推荐