【问题标题】:Convert JSON object containing objects into an array of objects将包含对象的 JSON 对象转换为对象数组
【发布时间】:2016-12-06 08:44:51
【问题描述】:

我的数据目前以这种格式存储,存储在 JSON 文件中:

{
    "name": {
        "0": ______,
        "1": ______,
        "2": ______
    },
    "xcoord": {
        "0": ______,
        "1": ______,
        "2": ______
    },
    "ycoord": {
        "0": ______,
        "1": ______,
        "2": ______
    }
}

我需要将它转换成这种格式,作为一个对象数组:

[
    {
        "id": 0,
        "name": _____,  
        "xcoord": _____,
        "ycoord": _____
    },
    {
        "id": 1,
        "name": _____,
        "xcoord": _____,
        "ycoord": _____
    },
    {
        "id": 2,
        "name": _____,
        "xcoord": _____,
        "ycoord": _____
    }
]

如您所见,我还需要在我的第一种数据格式中获取数字键,并将它们作为我的第二种数据格式中的“id”值。 (由于数组中对象的位置和 id 编号匹配,也许这将是创建“id”键的另一种方法?)然后我会将我的第二种数据格式存储到一个局部变量中以在我的 JS 代码中使用.

关于如何做到这一点的任何想法?我不太擅长重组这种数据。

【问题讨论】:

  • 创建一个数组,然后迭代 JSON 对象并为每个子属性检查数组中是否已经存在一个元素。如果不创建它。然后添加带有值的父属性。

标签: javascript arrays json object javascript-objects


【解决方案1】:

这可以通过两个重叠的.forEach() 来完成:

var obj = {
    "name": {
        0: 'name0',
        1: 'name1',
        2: 'name2'
    },
    "xcoord": {
        0: 'xcoord0',
        1: 'xcoord1',
        2: 'xcoord2'
    },
    "ycoord": {
        0: 'ycoord0',
        1: 'ycoord1',
        2: 'ycoord2'
    }
};

var res = [];

Object.keys(obj).forEach(k => {
  Object.keys(obj[k]).forEach(v => {
    (res[v] = (res[v] || { id: v }))[k] = obj[k][v];
  });
});

console.log(res);

注意

这一行……​​

(res[v] = (res[v] || { id: v }))[k] = obj[k][v]

... 是一种简短的方法:

if(!res[v]) {
  // if this record doesn't exist yet,
  // create it with its implied 'id' property
  res[v] = { id: v };
}
// add property 'k' to this record
res[v][k] = obj[k][v];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2022-11-24
    • 2022-06-18
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多