将嵌套 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 对象,它应该创建一个具有相同 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"
}
]
所以,我想知道把它弄平的快速简单的步骤。
请告诉我解决这个问题的过程和方法。
谢谢
做起来很容易。
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;
}
我正在使用 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 对象,它应该创建一个具有相同 a
、b
值
[{
"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;
}