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

In JSON Object parent key name remove and Include its inner content

本文关键字:删除 包含其 内部 对象 JSON      更新时间:2023-09-26

这是我的JSON对象,我想从json中删除"item"键,并希望保留其内部对象包含"子"及其树,如JOSN。我该怎么做?

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

如果我理解您希望对象正确显示后的外观,那么这应该可以解决问题:

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

我会这样做:

//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 之后删除子密钥。

试试

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

演示

解释

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

2)获取valueitem属性,直接分配给value

3)最后删除valueitem属性。

更快的选择

objArray = objArray.map( function(value){ 
   var item = value.item; 
   var itemKeys = Object.keys(item); 
   for( var counter = 0; counter < itemKeys.length; counter++ ) 
   { 
     value[itemKeys[counter]] = item[itemKeys[counter]]; 
   } 
   delete value.item; 
   return value;
});

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

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>');