将嵌套 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对象,它应该创建一个具有相同a
、b
值的新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数组