如何合并输入的val占用的2个对象

时间:2018-09-20 09:24:03

标签: javascript jquery json object merge

我有两个JSON对象,我想将它们合并:

Object1: {"9":{"322":{"option0":"177"}}}
Object2: {"10":{"323":{"option":"456"}}}

我希望最终结果像这样:

{
    "9": {
        "322": {
            "option0": "177"
        }
    },
    "10": {
        "323": {
            "option": "456"
        }
    }
}

我尝试了concat方法,但结果是这样的:

{
    "9":{
        "322":{
            "option0":"177"
        }
    }
}
{
    "10":{
        "323":{
            "option":"456"
        }
    }
}

PS:对象是通过输入获取的,就像这样:

var object1 = $('input').val();

4 个答案:

答案 0 :(得分:3)

使用<% String foo = "foo"; String bar = "bar"; StringBuilder sb = new StringBuilder(); sb.append(foo); sb.append(bar); %> <%= sb.toString();%>

Object.assign()

答案 1 :(得分:2)

ES6方式:

const object1 = {"9":{"322":{"option0":"177"}}}
const object2 = {"10":{"323":{"option":"456"}}}

const object3 = { ...object1, ...object2 }

console.log(object3)

Codepen:

https://codepen.io/anon/pen/eLxBdK?editors=0001

尽可能使用ES6语法。

  • 短代码
  • 通常更具可读性
  • 这种情况尤其使您可以轻松进行深度合并(以前很痛苦)
  • 更快

答案 2 :(得分:1)

实际上,这些是objects而不是JSON Arrays,并且您得到了array的结果,因为Array#concat()将返回array,而您想要的是object

所以您可以使用 Object.assign() method

let obj = Object.assign({}, JSON.parse(o1), JSON.parse(o2));

注意:

如果您从input获取这些对象,则将它们作为strings获取,您需要使用JSON.parse()对其进行解析以获取正确的objects

let o1  = '{"9":{"322":{"option0":"177"}}}';
let o2 =  '{"10":{"323":{"option":"456"}}}';

let obj = Object.assign({}, JSON.parse(o1), JSON.parse(o2));

console.log(obj);

答案 3 :(得分:1)

由于您是从文本字段获取值的,因此它们最初将是JSON字符串。为了将它们视为对象并合并,则需要首先对其进行解析。然后,您可以使用jQuery的$.extend()方法来实现所需的输出,该方法将一个对象合并到另一个对象中。

演示:

var obj1 = JSON.parse($("#obj1").val());
var obj2 = JSON.parse($("#obj2").val());
var merged= $.extend({}, obj1, obj2);
console.log(merged);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="obj1" value='{"9":{"322":{"option0":"177"}}}'/>
<input type="text" id="obj2" value='{"10":{"323":{"option":"456"}}}'/>

文档:https://api.jquery.com/jquery.extend/