[英]How to flatten a nested JSON data structure into an object with key value pairs
來自源的字符串來自JSON對象中的碎片JSON對象。我想將此JSON結構轉換為平面JSON結構
{
"nest": {
"a": {
"b": {
"h": {
"i": {
"all.css": "1",
"j": {
"k": {
"l": {
"lr.png": "2",
"c.png": "3"
},
".png": "4"
}
}
}
}
}
}
}
}
我嘗試這樣做,但是我最多只能得到1個鍵值對,我想要的是{"abhiall.css":"1","abhijkllr.png":"2","abhijklc.png":"3"
……等等。 謝謝
您可以對嵌套對象使用迭代和遞歸方法。
function flatten(object, target, path) { path = path || ''; Object.keys(object).forEach(function (key) { if (object[key] && typeof object[key] === 'object') { flatten(object[key], target, path + key); return; } target[path + key] = object[key]; }); } var data = { nest: { a: { b: { h: { i: { "all.css": "1", j: { k: { l: { "lr.png": "2", "c.png": "3" }, ".png": "4" } } } } } } } }, flat = {}; flatten(data.nest, flat); console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以使用用戶遞歸函數返回所需的結果。
var obj = {"nest":{"a":{"b":{"h":{"i":{"all.css":"1","j":{"k":{"l":{"lr.png":"2","c.png":"3"},".png":"4"}}}}}}}} function flat(data, c) { var result = {} for(var i in data) { if(typeof data[i] == 'string') result[c + i] = data[i] if(typeof data[i] == 'object') result = Object.assign(result, flat(data[i], c+= i)) } return result } console.log(flat(obj.nest, ''))
對於對象數組,我做了以下說明:確保傳入的對象數組至少為n> 0
flatten(objects, target, path) {
let me = this;
let retArray = [];
for(let x=0; x < objects.length; x++) {
let object = objects[x];
path = path || '';
target={};
target = me.flattenHelper(object, target, path);
retArray.push(target);
}
return retArray;}
..
flattenHelper(object, target, path){
let me = this;
Object.keys(object).forEach(function (key) {
console.log("key : "+ key + " : object : " + (object[key] && typeof object[key] === 'object') + " path : " + path);
if (object[key] && typeof object[key] === 'object') {
me.flattenHelper(object[key], target, path + key);
}
target[path + key] = object[key];
console.log(target);
});
return target;}
使用此功能:
const flattenObject = (obj, prefix = '') => Object.keys(obj).reduce((acc, k) => { const pre = prefix.length ? prefix : ''; if (typeof obj[k] === 'object') Object.assign(acc, flattenObject(obj[k], pre + k)); else acc[pre + k] = obj[k]; return acc; }, {}); console.log(flattenObject({"nest": {"a": {"b": {"h": {"i":{"all.css":"1","j": {"k": {"l": {"lr.png": "2","c.png": "3"},".png": "4"}}}}}}}}));
.as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.