从现有值重新排列JSON值

时间:2019-06-13 15:41:16

标签: javascript dictionary reduce

提供的JSON是非结构化的,无法满足我的许多要求    要求。我已经尝试了很多方法,但是要花很长时间    当我提供100,000条记录时

实施代码

for (var f in stack.data) {
  var field = new Object();
  for (var o in stack.data[f]['field_values']) {
    field[stack.data[f]['field_values'][o]['field_name']] = stack.data[f]['field_values'][o]['value'];
  }
  stack.data[f]['field_values'] = field;
}
console.log(JSON.stringify(stack, null, 2));

输入JSON:

var stack = {
  "data": [{
    "id": 950888888073,
    "name": "www.stackoverflow.com",

    "field_values": [{
        "field_name": "Newsletter?",
        "value": true
      },
      {
        "field_name": "Parent",
        "value": 950888661
      },
      {
        "field_name": "Birthday",
        "value": "2018-04-29"
      },
      {
        "field_name": "Related matter",
        "value": 1055396205
      },
      {
        "field_name": "Referral",
        "value": "Don Ho"
      },
      {
        "field_name": "Spouse",
        "value": "Wo Fat"
      }
    ]
  }]
}

预期输出:

{
  "data": [
  {
  "id": 950888888073,
  "name": "www.stackoverflow.com",
  "field_values": {
    "Newsletter?": true,
    "Parent": "Gigi Hallow",
    "Birthday": "2018-04-29",
    "Related": "2012-00121-Sass",
    "Referral": "Don Ho",
    "Spouse": "Wo Fat"
  }

有时“ field_values可以为空。也需要检查它们

     {
      "id": 950821118875,
      "name": "www.google.com",
      "field_values": [],
}

这主要是重新排列值。值在这里成为键。实际上应该有一个班轮来处理这个问题,但是我没有其他选择。

希望问题很清楚

1 个答案:

答案 0 :(得分:1)

声明一个变量来保存数组元素可能会有所帮助,而不是每次循环都进行4级索引。您还可以使用解构来提取对象的属性。

并使用{}而不是new Object

即使这不能提高性能,也可以使代码更易于阅读。

var stack = {
  "data": [{
    "id": 950888888073,
    "name": "www.stackoverflow.com",

    "field_values": [{
        "field_name": "Newsletter?",
        "value": true
      },
      {
        "field_name": "Parent",
        "value": 950888661
      },
      {
        "field_name": "Birthday",
        "value": "2018-04-29"
      },
      {
        "field_name": "Related matter",
        "value": 1055396205
      },
      {
        "field_name": "Referral",
        "value": "Don Ho"
      },
      {
        "field_name": "Spouse",
        "value": "Wo Fat"
      }
    ]
  }]
}

for (var f in stack.data) {
  const field = {};
  const fobj = stack.data[f];
  for (var o in fobj.field_values) {
    const {field_name, value} = fobj.field_values[o];
    field[field_name] = value;
  }
  fobj.field_values = field;
}

console.log(JSON.stringify(stack, null, 2));