我有两个从JSON转换的数据对象。两者都非常复杂,我想以类似于jQuery使用扩展合并两个对象的方式来合并它们。
例
JSON 1:
{
...
"blah":
{
"params":
{
"foo":
{
"default": "bar",
"misc": "0",
...
},
...
},
...
},
...
}
JSON 2:
{
...
"blah":
{
"params":
{
"foo":
{
"value": "val",
"misc": "1",
...
},
...
},
...
},
...
}
合并成
{
...
"blah":
{
"params":
{
"foo":
{
"default": "bar",
"value": "val",
"misc": "1",
...
},
...
},
...
},
...
}
用PHP对象解决此问题的最佳方法是什么。
将每个JSON字符串解码为一个关联数组,合并结果并重新编码
$a1 = json_decode( $json1, true );
$a2 = json_decode( $json2, true );
$res = array_merge_recursive( $a1, $a2 );
$resJson = json_encode( $res );
更新: 如果您有特定的合并要求,则需要编写自己的合并功能。我在下面写了一篇满足您问题中要求的书。如果您有其他未提及的要求,则可能需要对其进行调整。
<?php
$json1 = '
{
"blah":
{
"params":
{
"foo":
{
"default": "bar",
"misc": "0"
}
},
"lost":
{
"one": "hat",
"two": "cat"
}
}
}';
$json2 = '
{
"blah":
{
"lost": "gone",
"params":
{
"foo":
{
"value": "val",
"misc": "1"
}
}
},
"num_array": [12, 52, 38]
}';
$a1 = json_decode( $json1, true );
$a2 = json_decode( $json2, true );
/*
* Recursive function that merges two associative arrays
* - Unlike array_merge_recursive, a differing value for a key
* overwrites that key rather than creating an array with both values
* - A scalar value will overwrite an array value
*/
function my_merge( $arr1, $arr2 )
{
$keys = array_keys( $arr2 );
foreach( $keys as $key ) {
if( isset( $arr1[$key] )
&& is_array( $arr1[$key] )
&& is_array( $arr2[$key] )
) {
$arr1[$key] = my_merge( $arr1[$key], $arr2[$key] );
} else {
$arr1[$key] = $arr2[$key];
}
}
return $arr1;
}
$a3 = my_merge( $a1, $a2);
$json3 = json_encode( $a3 );
echo( $json3 );
/*
{
"blah":
{
"params":
{
"foo":
{
"default": "bar",
"misc": "1",
"value": "val"
}
},
"lost": "gone"
},
"num_array": [12,52,38]
}
*/
问题内容: 我有两个json 第一个是 第二个是 我想合并它们并有一个像 有没有办法合并它们?如果需要在JSON中更改结构,对我来说也可以 谢谢。 问题答案: 像应该工作。 官方PHP文档中的 array_merge 官方PHP文档中的 json_decode 编辑: 尝试将第二个参数添加到json_decode。这样会将对象转换为关联数组。
给定已排序的两个单链表,合并这些列表。 示例: list1: 1 2 3 5 7 list2: 0 4 6 7 10 --- 尽管这个解决方案非常简单,并且有几个不同的问题实现,不管是否使用递归(如下所示http://www.geeksforgeeks.org/merge-two-sorted-linked-lists/见方法3), 我想知道这个实现有多复杂: 如果其中一个列表是空的,只需返回另一
首先,我的问题类似于这个已经回答过的问题,在Java中,将两个arrayList合并成一个新的arrayList,没有重复项,并且顺序正确。 然而,这里的不同之处在于,我尝试将两个列表合并在一起,而不仅仅是一个字符串。我的意图是合并以下类型的两个对象(为了简化,我从示例中去掉了不必要的信息): 所以我得到了一个新的项目,它有一个总结计数。这将消除不需要的重复,因为这些对象上的uniqueKey是相
问题内容: 我有两个数组,我想将这两个数组合并为一个数组。请查看以下详细信息: 第一个数组: 第二个数组: 我想要这个结果。有人知道该怎么做吗? 希望你理解这个问题。先感谢您。 问题答案: 已修正 (再次) 接受无限数量的输入数组,将所有子数组作为索引数组合并到一个容器中,然后返回结果。 编辑03/2014: 提高可读性和效率
问题内容: 我有以下输入-2个json文件,一个是基础文件,第二个包含相同的属性,但值不同,我想合并这些对象。 例如: 第二个文件: 结果应该是这样的: 使用powershell可以做到吗? 问题答案: (请参见下面的更新) 结果: 您可能会考虑不覆盖左值: 在这种情况下,结果将是: 更新2019年11月16日 的参数已经被耗尽,分过和参数(遗憾的重大更改)。好消息是,对象合并的默认参数设置包含在
我有一个Java类,它有20个属性及其相应的getter和setter。还有两个对象列表:和。 使用Java 8: 但是我必须在哪个地方指定属性呢?是否应该重写和方法?