在没有jQuery的情况下连接两个JSON对象

时间:2016-03-23 20:05:28

标签: javascript angularjs json

我有两个JSON对象,我想创建一个对象,使用Angular或纯JavaScript(没有jQuery)。 Angular.extend似乎没有得到我想要的东西,而是做了更多的合并。

{
  "field1-1": 1,
  "field1-2": 2,
  "field1-3": 3,
  "field1-4": "four",
  "field1-5":
  {
    "field1-1-1": 5.1,
    "field1-1-2": 5.2
  }
}

并且

{
  "field2-1": 21,
  "field2-2": 22,
  "field2-3": "three",
  "field2-4":
  {
    "field2-1-1": 4.1,
    "field2-1-2": 4.2
  }
}

我希望最终结果是:

{
  "field1-1": 1,
  "field1-2": 2,
  "field1-3": 3,
  "field1-4": "four",
  "field1-5":
  {
    "field1-1-1": 5.1,
    "field1-1-2": 5.2
  }
},
{
  "field2-1": 21,
  "field2-2": 22,
  "field2-3": "three",
  "field2-4":
  {
    "field2-1-1": 4.1,
    "field2-1-2": 4.2
  }
}

4 个答案:

答案 0 :(得分:6)

所以你想要一个数组:

var array = [object1, object2];

var object1 = { "field1-1": 1, "field1-2": 2, "field1-3": 3, "field1-4": "four", "field1-5": { "field1-1-1": 5.1, "field1-1-2": 5.2 } },
    object2 = { "field2-1": 21, "field2-2": 22, "field2-3": "three", "field2-4": { "field2-1-1": 4.1, "field2-1-2": 4.2 } },
    array = [object1, object2];

document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');

如果您想获得单个对象,则可以使用此提案。

它使用对象迭代数组,然后遍历对象的键。原始对象的值将分配给新对象的相应属性。

var object1 = { "field1-1": 1, "field1-2": 2, "field1-3": 3, "field1-4": "four", "field1-5": { "field1-1-1": 5.1, "field1-1-2": 5.2 } },
    object2 = { "field2-1": 21, "field2-2": 22, "field2-3": "three", "field2-4": { "field2-1-1": 4.1, "field2-1-2": 4.2 } },
    object = function (array) {
        var o = {};
        array.forEach(function (a) {
            Object.keys(a).forEach(function (k) {
                o[k] = a[k];
            });
        });
        return o;
    }([object1, object2]);

document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

答案 1 :(得分:5)

除非我弄错了,否则你想要的结果看起来像一个包含两个对象的简单数组:

var result = [objectOne, objectTwo];

这与想要将两个对象连接(或合并)到一个对象(这是angular.extendObject.assign将会做什么完全不同。

答案 2 :(得分:4)

您的最终结果实际上并不是有效的JSON。假设对象是名为object1object2的变量,您可以创建一个这样的数组:

var objectArray = [ object1, object2 ];

答案 3 :(得分:0)

全部谢谢!

我试图创建一个由多个对象组成的集合对象,作为从角度到基于javaEE的API的休息调用的整体对象,该对象具有对象作为参数以及REST URL的动态变量。我假设对象需要在json中没有键,但我错了。

所以我发送的对象现在基本上就是:

"dynamicID": "keyValue",
"object1":
{
  "field1-1": 1,
  "field1-2": 2,
  "field1-3": 3,
  "field1-4": "four",
  "field1-5":
  {
    "field1-1-1": 5.1,
    "field1-1-2": 5.2
  }
},
"object2":
{
  "field2-1": 21,
  "field2-2": 22,
  "field2-3": "three",
  "field2-4":
  {
    "field2-1-1": 4.1,
    "field2-1-2": 4.2
  }
}

我只是简单地创建了一个新对象:

$scope.restObject = {"dynamicID": $scope.keyValue, $scope.object1, $scope.object2}