首页 > 解决方案 > 将 JSON 解析为数组中的字符串并创建嵌套对象

问题描述

我有一个嵌套数组,看起来像这样:

 

{
  "id": 1,
    "QUALITY": 91.98,
    "TEMPERATURE": 20.5,
    "SENSOR_DATE": "2021-09-24T04:53:06.801Z",
    "SOURCE_ID": 1,
    "SENSOR_NAME": "TD2",
    "NEXT_OFFSET": 11931
},

我想改变这个字符串

  "QUALITY": 91.98,
  "TEMPERATURE": 20.5,

对此:

{
    "data": [
        {
            "TELEMATICS": {
                "QUALITY": 91.98,
                "TEMPERATURE": 20.5
            },
            "SOURCE_ID": "1",
            "SENSOR_NAME": "TD2",
            "SENSOR__DATETIME": "2021-09-24T04:53:06.801Z"
        },
    ],
    "NEXT_OFFSET": 11931
}

我做了很多不同的尝试,但是这段代码我能得到的只是:

var telematics = JSON.parse(JSON.stringify(payload, ['QUALITY', 'TEMPERATURE']));
var data = JSON.parse(JSON.stringify(payload, ['SOURCE_ID', 'SENSOR_NAME', 'SENSO$
payload = JSON.parse(JSON.stringify({TELEMATICS: telematics, data}, null, 2));
payload = JSON.stringify({data: payload}, null, 2);

结果,我得到了两个不同的对象。我不能将它们组合成一个嵌套的TELEMATICS数组:

{
                "QUALITY": 91.33,
                "TEMPERATURE": 25.7
            }
        ],
        "data": [
            {
                "SOURCE_COMPONENT_ID": 1,
                "SENSOR_NAME": "TD2",
                "SENSOR_READING_DATETIME": "2021-09-24T04:53:06.801Z"
            },

标签: javascriptarraysjson

解决方案


你说你有一个数组 - 显示的第一个项目是一个对象,也许它是该数组的一个元素?让我们假设,这payload是一个这样的对象数组。

您正在尝试在内部创建一个“数据”数组 - 带有一个元素。有必要吗?它可能有多个元素吗?让我们假设它现在只有一个元素。

const payload = [{
  "id": 1,
  "QUALITY": 91.98,
  "TEMPERATURE": 20.5,
  "SENSOR_DATE": "2021-09-24T04:53:06.801Z",
  "SOURCE_ID": 1,
  "SENSOR_NAME": "TD2",
  "NEXT_OFFSET": 11931
}, {
  "id": 2,
  "QUALITY": 91.98,
  "TEMPERATURE": 20.5,
  "SENSOR_DATE": "2021-09-24T04:53:06.801Z",
  "SOURCE_ID": 1,
  "SENSOR_NAME": "TD2",
  "NEXT_OFFSET": 11931
}];

const result = payload.map(({QUALITY, TEMPERATURE, NEXT_OFFSET, ...rest})=> ({
  data: [{
    ...rest,
    TELEMATICS: {
      QUALITY,
      TEMPERATURE
    }
  }],
  NEXT_OFFSET
}));

console.log(result);


推荐阅读