将嵌套 JSON 转换为平面 JSON

Posted

技术标签:

【中文标题】将嵌套 JSON 转换为平面 JSON【英文标题】:Convert Nested JSON to Flat JSON 【发布时间】:2017-11-22 17:43:09 【问题描述】:

我正在使用 javascript,并且我已经嵌套了从 mongodb 获取的 json 对象。

"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"
    
    ]

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

谢谢

【问题讨论】:

这很容易做到...您尝试了什么? 你甚至没有用你想用的语言标记它......你至少应该有一个你自己想出的方法来展示给我们。 试试npmjs.com/package/flat 我正在使用 JavaScript @CBroe。我尝试使用forloop,但是当我使用 forloop 进行操作时,它变成了一个漫长的过程。 一个循环遍历主要级别项目,并在另一个循环中将所有内容从c 子结构中取出,将其放置在同一主级别上,然后删除原始c ... “这有多难?” 【参考方案1】:

这很容易做到。

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 是你的数组。

【讨论】:

js的绝妙使用【参考方案2】:

这将使 JSONObject 变平,即使其中包含 JSONArray ...请使用它..会工作

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;

【讨论】:

以上是关于将嵌套 JSON 转换为平面 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 对象的嵌套部分转换为点链式平面 JSON?

使用jolt变换并将平面json转换为复杂的嵌套json数组

我如何将平面数据框转换为 spark(scala 或 java)中的嵌套 json

平面 json 到嵌套 json python

将嵌套 JSON 转换为简单 JSON

将嵌套 JSON 转换为数据框