合并JSON和覆盖值

时间:2014-10-23 13:56:54

标签: javascript jquery json

我需要能够将JSON中的对象( obj1 )与另一个对象( obj2 )合并。 obj2是obj1的子集,因此它永远不会有任何其他额外的值。

var obj1 = {
    "name":"bob",
    "age":99,
    "occupation":"builder"
}

var obj2 = {
    "name":"Joe",
    "age":23,
}

当合并时,较小对象的值应该替换较大类中的值,如此。

var obj1 = {
    "name":"Joe",
    "age":23,
    "occupation":"builder"
}

有没有人知道如何在jQuery或Javascript中执行此操作?

我尝试了 $。合并(..),但这似乎不起作用。我可以写一个for(..)循环,但必须有一个更简单的解决方案。

2 个答案:

答案 0 :(得分:3)

使用$ .extend第二个对象替换第一个对象中的值:http://api.jquery.com/jquery.extend/



var obj1 = {
    "name":"bob",
    "age":99,
    "occupation":"builder"
}

var obj2 = {
    "name":"Joe",
    "age":23,
}

jQuery.extend(obj1, obj2);
for (var j in obj1) {
        alert(j + " " + obj1[j]);
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13; 得到:  {     &#34;名称&#34;:&#34;乔&#34 ;,     &#34;年龄&#34;:23,     &#34;职业&#34;:&#34;助洗剂&#34; }
将在您的答案中给出答案,或者如果您希望总是替换值较小的对象,您可以使用:

&#13;
&#13;
var obj1 = {
        "name":"bob",
        "age":99
    }

    var obj2 = {
        "name":"Joe",
        "age":23,
        "occupation":"builder"
    }
    if(Object.keys(obj1).length>Object.keys(obj2).length)
    jQuery.extend(obj1, obj2);
else
  jQuery.extend(obj2,obj1);
    for (var j in obj1) {
            alert(j + " " + obj1[j]);
    }
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13; 得到:  {     &#34;名称&#34;:&#34;摆锤&#34 ;,     &#34;年龄&#34;:99,     &#34;职业&#34;:&#34;助洗剂&#34; }

答案 1 :(得分:1)

function mergeEm(bigger, smaller) {

  for (var property in smaller) {
    bigger[property] = smaller[property];
  }
  return bigger;

}