在JSON对象中,父键名称删除并包含其内部内容

时间:2016-03-11 10:36:56

标签: javascript arrays json

这是我的JSON对象,我要删除" item"来自json的密钥,并希望保持其内部对象包括" children"它的树像JOSN。我怎样才能做到这一点?

[
    {
      "item": {
        "id": 11865,
        "parentid": null,
        "levelid": 63,
        "name": "Total"
      },
      "children": [
        {
          "item": {
            "id": 10143,
            "parentid": 11865,
            "levelid": 19,
            "name": "Productive"
          }
        }
      ]
    }
  ]

4 个答案:

答案 0 :(得分:0)

objArray = objArray.map( function(value){ 
   var item = value.item; 
   for( var key in item ) 
   { 
     value[key] = item[key]; 
   } 
   delete value.item; 
   return value;
});

DEMO

<强>解释

1)使用map迭代此给定数组value的每个项目(objArray)。

2)获取item的{​​{1}}属性,直接将其分配给value

3)最后删除value的{​​{1}}属性。

更快的选项

item

答案 1 :(得分:0)

如果我理解了你希望你的对象在正确之后看起来像什么,那么这应该可以解决问题:

var arrayOfObjects = [
    {
      "item": {
        "id": 11865,
        "parentid": null,
        "levelid": 63,
        "name": "Total"
      },
      "children": [
        {
          "item": {
            "id": 10143,
            "parentid": 11865,
            "levelid": 19,
            "name": "Productive"
          }
        }
      ]
    }
]
arrayOfObjects.forEach(function(obj) {
  obj.id = obj.item.id;
  obj.parentid = obj.item.parentid;
  obj.levelid = obj.item.levelid;
  obj.name = obj.item.name;
  delete obj.item;
});

所有这一切都是手动将数据从obj.item移动到obj,然后完全删除obj.item

答案 2 :(得分:0)

您可以使用递归,该递归保留item的内容并添加子属性。

function delItem(a, i, aa) {
    var children = a.children;
    if (a.item) {
        aa[i] = a.item;
        aa[i].children = children;
        delete a.item;
    }
    Array.isArray(children) && children.forEach(delItem);
}

var array = [{ "item": { "id": 11865, "parentid": null, "levelid": 63, "name": "Total" }, "children": [{ "item": { "id": 10143, "parentid": 11865, "levelid": 19, "name": "Productive" } }] }];
array.forEach(delItem);
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');

答案 3 :(得分:0)

我会这样做:

//your original array of objects
var array = [{
  "item": {
    "id": 11865,
    "parentid": null,
    "levelid": 63,
    "name": "Total"
  },
  "children": [
    {
      "item": {
        "id": 10143,
        "parentid": 11865,
        "levelid": 19,
        "name": "Productive"
      }
    }
  ]
}, ...];

array.forEach(function(parent) {
    flattenKey(parent, 'item');
});

function flattenKey(parent, keyName) {
    var section = parent[keyName];
    var child = section ? section : {};
    var keys = Object.keys(child);
    keys.forEach(function(key) {
        parent[key] = child[key];
    })
    delete parent[keyName];
}

基本上,函数 flattenKey 会压扁给定对象的任何键(给定其键)。

  1. 逻辑与此处的其他解决方案类似:迭代子键并将其值分配给父对象(展平)。
  2. 然后在步骤1之后删除子密钥。