Javascript 如何将嵌套JSON数据结构展平为具有键值对的对象
来自源代码的字符串来自JSON对象中的片段JSON对象。我想将此JSON结构转换为平面JSON结构Javascript 如何将嵌套JSON数据结构展平为具有键值对的对象,javascript,json,Javascript,Json,来自源代码的字符串来自JSON对象中的片段JSON对象。我想将此JSON结构转换为平面JSON结构 { "nest": { "a": { "b": { "h": { "i": { "all.css": "1", "j": { "
{
"nest": {
"a": {
"b": {
"h": {
"i": {
"all.css": "1",
"j": {
"k": {
"l": {
"lr.png": "2",
"c.png": "3"
},
".png": "4"
}
}
}
}
}
}
}
}
我试图这么做,但我只能得到一个键值对,
我想要的是{“abhiall.css”:“1”,“abhijklr.png”:“2”,“abhijklc.png”:“3”
。等等。
谢谢您可以对嵌套对象使用迭代和递归方法
函数展平(对象、目标、路径){
路径=路径| |“”;
Object.keys(对象).forEach(函数(键){
if(对象[键]&&typeof对象[键]==“对象”){
展平(对象[关键点]、目标、路径+关键点);
返回;
}
目标[路径+键]=对象[键];
});
}
var data={nest:{a:{b:{h:{i:{“all.css”:“1”,j:{k:{l:{“lr.png”:“2”,“c.png”:“3”},.png”:“4”}},
平坦={};
展平(data.nest,flat);
console.log(平面);
。作为控制台包装{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”}
功能平面(数据,c){
var result={}
用于(数据中的var i){
如果(数据类型[i]=“字符串”)结果[c+i]=数据[i]
if(数据类型[i]=“object”)result=object.assign(结果,平面(数据[i],c+=i))
}
返回结果
}
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;}
使用此功能:
const flattobject=(对象,前缀=“”)=>
对象键(obj).reduce((acc,k)=>{
const pre=prefix.length?前缀:“”;
if(对象类型[k]=='object')object.assign(acc,扁平化对象(对象类型[k],前置+k));
else acc[pre+k]=obj[k];
返回acc;
}, {});
log(flattobject({“nest”:{“a”:{“b”:{“h”:{“i”:{“all.css”:“1”,“j”:{“k”:{“l”:{“lr.png”:“2”,“c.png”:“3”},.png”:“4”}));
.as控制台{背景色:黑色!重要;颜色:石灰;}
.as console wrapper{max height:100%!important;top:0;}
显示您的代码,我们将帮助您修复它。没有它,我们无法帮助您。这感觉更像是一个作业问题,而不是其他任何问题。如果是这样,请在开始编码之前尝试在纸上解决它,这样更容易发现问题。显示您如何找到第一对。
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;}