将 JSON 字符串转换为 JSON 对象并保留所有数据

问题描述 投票:0回答:1

我需要过滤 JSON 文件以获取报告的相关数据

JSON 看起来像

let oldJSON = [
    {
    "id": "c3c6f410f58e5836431b473ebcf134756232d04f2bf35edff8",
    "component": "checkbox",
    "customFields": [

    ],
    "index": 0,
    "label": "Sector2",
    "options": {
      "62f92fab79ac81d933765bd0bbc4a1f5ea26cb3a088bcb4e6e": {
        "index": 0,
        "value": "Bob",
        "label": "Bob",
        "count": 1
      },
      "2fe91aa3567c0d04c521dcd2fc7e40d7622bb8c3f594d503da": {
        "index": 1,
        "value": "Student",
        "label": "Student",
        "count": 1
      },
      "c59ea1159f33b91a7f6edc6925be5e373fc543e4": {
        "index": 2,
        "value": "BBB",
        "label": "BBB",
        "count": 1
      },
      "c59ea1159f33b91a7f6edc6925be5e373fc54AAA": {
        "index": 3,
        "value": "Orange Duck",
        "label": "Orange Duck",
        "count": 1
      }
    },
    "required": false,
    "validation": "/.*/",
    "imported": false
  },
  {
    "id": "f794c6a52e793ee6f5c42cd5df6b4435236e3495e951709485",
    "component": "textInput",
    "customFields": [

    ],
    "index": 1,
    "label": "Brown Cow",
    "options": {
    },
    "required": false,
    "validation": "/.*/",
    "imported": false
  },
  {
    "id": "f794c6a52e793ee6f5c42cd5df6b4435236e3495e95170ZZZ",
    "component": "textInput",
    "customFields": [

    ],
    "index": 1,
    "label": "Red Fish",
    "options": {
    },
    "required": false,
    "validation": "/.*/",
    "imported": false
  },
 ];

如果我用

过滤文件
oldJSON = oldJSON.filter(item => item.id && item.label && item.options)
                   .map(({ id, label, options }) => ({ id, label, options}));

我明白了

[ { id: 'c3c6f410f58e5836431b473ebcf134756232d04f2bf35edff8',
    label: 'Sector2',
    options: 
     { '62f92fab79ac81d933765bd0bbc4a1f5ea26cb3a088bcb4e6e': [Object],
       '2fe91aa3567c0d04c521dcd2fc7e40d7622bb8c3f594d503da': [Object],
       c59ea1159f33b91a7f6edc6925be5e373fc543e4: [Object],
       c59ea1159f33b91a7f6edc6925be5e373fc54AAA: [Object] } },
  { id: 'f794c6a52e793ee6f5c42cd5df6b4435236e3495e951709485',
    label: 'Brown Cow',
    options: {} },
  { id: 'f794c6a52e793ee6f5c42cd5df6b4435236e3495e95170ZZZ',
    label: 'Red Fish',
    options: {} } ]

options
子数组丢失了它的值;他们现在是
[object]

如果我字符串化

oldJSON=JSON.stringify(oldJSON);
我得到

[{"id":"c3c6f410f58e5836431b473ebcf134756232d04f2bf35edff8","label":"Sector2","options":{"62f92fab79ac81d933765bd0bbc4a1f5ea26cb3a088bcb4e6e":{"index":0,"value":"Bob","label":"Bob","count":1},"2fe91aa3567c0d04c521dcd2fc7e40d7622bb8c3f594d503da":{"index":1,"value":"Student","label":"Student","count":1},"c59ea1159f33b91a7f6edc6925be5e373fc543e4":{"index":2,"value":"BBB","label":"BBB","count":1},"c59ea1159f33b91a7f6edc6925be5e373fc54AAA":{"index":3,"value":"Orange Duck","label":"Orange Duck","count":1}}},{"id":"f794c6a52e793ee6f5c42cd5df6b4435236e3495e951709485","label":"Brown Cow","options":{}},{"id":"f794c6a52e793ee6f5c42cd5df6b4435236e3495e95170ZZZ","label":"Red Fish","options":{}}]

这给了我子数组的所有数据

但是现在我有一个字符串,我需要一个对象。

如果我解析

oldJSON=JSON.parse(oldJSON)
;

我得到了一个对象,但我现在在子数组中再次有了

[Object]

在过滤并保留其所有数据后,如何将 oldJSON 变成一个对象?

谢谢

javascript json google-apps-script
1个回答
1
投票

您面临的问题不是由于过滤操作,而是由于 JS console.log() 方法如何显示嵌套对象。当你看到[Object]时,说明该位置的值是一个对象。

要在控制台中查看嵌套对象,您可以使用

console.log(JSON.stringify(oldJSON, null, 2))
漂亮地打印 JSON 字符串。

这会将整个对象(包括嵌套对象)打印到控制台。 JSON.stringify 的 null 和 2 参数意味着所有属性都应该包含在 JSON 字符串中,并且它们应该以 2 个空格的缩进进行漂亮的打印

© www.soinside.com 2019 - 2024. All rights reserved.