将嵌套 JSON 转换为平面 JSON

Convert Nested JSON to Flat JSON

我正在使用 javascript 并且我嵌套了 json 来自 mongodb 的对象。

"abc": [
    {
      "a": "01AABCE2207R1Z5",
      "b": "Y",
      "c": [
        {
          "ca": "A",
          "cb": "AflJufPlFStqKBZ",
          "cc": "S008400"
         },
         {
          "cx": "A",
          "cy": "AflJufPlFStqKBZ",
          "cz": "S008400"
         }
        ]
     },

      {
      "a": "01AABCE2207R1Z5",
      "b": "Y",
      "c": [
        {
          "ca": "A",
          "cb": "AflJufPlFStqKBZ",
          "cc": "S008400"
         },
         {
          "cx": "A",
          "cy": "AflJufPlFStqKBZ",
          "cz": "S008400"
         }
        ]
     }
    ]

以上架构具有固定字段,架构不会发生变化。

现在我想把它变成平面 json 数组对象,结果应该是这样的。如果 c 有多个 json 对象,它应该创建一个具有相同 ab

的新 json 对象
 [{
     "a": "01AABCE2207R1Z5",
     "b": "Y", 
     "ca": "A",
     "cb": "AflJufPlFStqKBZ",
     "cc": "S008400" 
    },
{
     "a": "01AABCE2207R1Z5",
     "b": "Y",  
     "cx": "A",
     "cy": "AflJufPlFStqKBZ",
     "cz": "S008400"
    },
    {
     "a": "01AABCE2207R1Z5",
     "b": "Y", 
     "ca": "A",
     "cb": "AflJufPlFStqKBZ",
     "cc": "S008400" 
    },
    {
     "a": "01AABCE2207R1Z5",
     "b": "Y",  
     "cx": "A",
     "cy": "AflJufPlFStqKBZ",
     "cz": "S008400"
    }
    ]

所以,我想知道把它弄平的快速简单的步骤。 请告诉我解决这个问题的过程和方法。

谢谢

做起来很容易。

var flatArray = [];
var flatObject = {};

for (var index = 0; index < data.length; index++) {
  for (var prop in data[index]) {

    var value = data[index][prop];

    if (Array.isArray(value)) {
      for (var i = 0; i < value.length; i++) {
        for (var inProp in value[i]) {
          flatObject[inProp] = value[i][inProp];
        }
      }
    }else{
        flatObject[prop] = value;
    }
  }
  flatArray.push(flatObject);
}

console.log(flatArray);

data 是你的数组。

即使其中包含 JSONArray,这也会使 JSONObject 扁平化......请使用它......会起作用

const flatJSONObject = r => {//flaten the Json in full depth
    const oc = ({}).constructor;
    const ac = ([]).constructor;
    var o={};
    if(r.constructor === oc) 
    {
          for (var k in r) {
            if ( r[k].constructor === oc) o = {...o,...flatJSONObject(value)}
            else if (  r[k].constructor === ac) r[k].forEach(e =>o = {...o,...flatJSONObject(e)});
            else o[k] =  r[k];
          } 
    }
    return o;
}