Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合并两个json字符串时出现问题_Javascript_Json - Fatal编程技术网

Javascript 合并两个json字符串时出现问题

Javascript 合并两个json字符串时出现问题,javascript,json,Javascript,Json,我试图使用在express下运行的deepextend()来合并两个对象。注意:我知道JSON 1和JSON 2在结构上的差异——这可能是我的问题的原因吗?两者都是通过对数据字符串执行JSON.parse创建的。我无法控制这些数据是如何呈现给我的,因此任何关于如何修复的建议都是值得赞赏的 JSON 1: { '0': { name: 'Car', level: '3', customname: 'Black', description: 'descripti

我试图使用在express下运行的deepextend()来合并两个对象。注意:我知道JSON 1和JSON 2在结构上的差异——这可能是我的问题的原因吗?两者都是通过对数据字符串执行JSON.parse创建的。我无法控制这些数据是如何呈现给我的,因此任何关于如何修复的建议都是值得赞赏的

JSON 1:

{ '0': 
   { name: 'Car',
     level: '3',
     customname: 'Black',
     description: 'description here',
     availableForUse: true } }
JSON 2:

[ { description: 'description here',
    name: 'Car',
    availableForUse: false,
    _id: 56679b6f9754083f0fa5ce94 },
  { description: 'desc',
    name: 'Truck',
    availableForUse: false,
    _id: 5667fb8e0c85cf6d279c2af1 },
  { description: 'desc',
    name: 'Boat',
    availableForUse: false,
    _id: 5667fcc2771155032839a8db },
  { description: 'desc',
    name: 'Train',
    availableForUse: false,
    _id: 5667fd32771155032839a8dc } ]
合并后我得到了什么

{ '0': 
   { name: 'Car',
     level: '3',
     customname: 'Black',
     description: 'description here',
     availableForUse: true } }
我想要什么

[ { description: 'description here',
    name: 'Car',
    customname: 'Black',
    availableForUse: true,
    _id: 56679b6f9754083f0fa5ce94 },
  { description: 'desc',
    name: 'Truck',
    availableForUse: false,
    _id: 5667fb8e0c85cf6d279c2af1 },
  { description: 'desc',
    name: 'Boat',
    availableForUse: false,
    _id: 5667fcc2771155032839a8db },
  { description: 'desc',
    name: 'Train',
    availableForUse: false,
    _id: 5667fd32771155032839a8dc } ]

考虑到,问题是第二个参数是数组。
deep-extend
的API(大部分未记录)是
deep-extend(targetObject、sourceObject1、sourceObject2等)
。只有当源对象是非数组对象时,才会将其合并到目标中(请参见第100行)。

以下是我在不使用deep extend模块的情况下的操作方法

首先重新排列JSON1,使每个对象的
name
属性成为对象键:

var obj1 = Object.keys(obj).reduce(function (p, c) {
  var o = obj[c], name = o.name;
  p[o.name] = JSON.parse(JSON.stringify(o));
  return p;
}, {});
输出

{ Car: {...} }
然后,在对象数组上循环。如果存在与
名称
属性匹配的对象键,则覆盖从JSON1到JSON2的属性(如果存在)

for(变量i=0,l=arr1.length;i

权威数据集是JSON1还是JSON2?JSON1是否覆盖所有JSON2属性值?
for (var i = 0, l = arr1.length; i < l; i++) {
  var el = arr1[i], key = el.name;
  if (obj1[key]) {
    for (var p in el) {
     if (obj1[key][p]) el[p] = obj1[key][p];
    }
  }
}