Javascript 从数组JSON输入返回所有字段的JSON路径?
输入JSON数组时,我需要一个JSON路径来返回所有字段。这就像将数组JSON转换为平面JSON文件 数组JSON输入:Javascript 从数组JSON输入返回所有字段的JSON路径?,javascript,arrays,json,jsonpath,Javascript,Arrays,Json,Jsonpath,输入JSON数组时,我需要一个JSON路径来返回所有字段。这就像将数组JSON转换为平面JSON文件 数组JSON输入: { "field1": "ALNT12345", "field2": "ALNT345346", "field3": "2015353423", "field4": "2332124343", "arrayfield1": [ { "arr1": "625347", "ar
{
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arrayfield1": [
{
"arr1": "625347",
"arr2": "rere"
},
{
"arr1": "634441",
"arr2": "sdfsd"
}
]
}
[
{
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arr1": "625347",
"arr2": "rere"
},
{
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arr1": "634441",
"arr2": "sdfsd"
}
]
上述数组json必须转换为2条记录,如下所示。因此,我尝试使用json路径来实现这一点
所需输出:
{
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arrayfield1": [
{
"arr1": "625347",
"arr2": "rere"
},
{
"arr1": "634441",
"arr2": "sdfsd"
}
]
}
[
{
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arr1": "625347",
"arr2": "rere"
},
{
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arr1": "634441",
"arr2": "sdfsd"
}
]
我尝试的是JSON路径
$.arrayfield1*
但它只返回数组字段。如果JSON路径不是实现这一点的方法,请您建议javascript代码返回所有字段
谢谢。您可能想试试这个:
var arr = {
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arrayfield1": [
{
"arr1": "625347",
"arr2": "rere"
},
{
"arr1": "634441",
"arr2": "sdfsd"
}
],
"arrayfield2": [
{
"arr1": "625347",
"arr2": "rere"
},
{
"arr1": "634441",
"arr2": "sdfsd"
}
]
};
console.log(conversion(arr));
function conversion(arr) {
var oneLevel = {};
var multiLevel = [];
for(var key in arr) {
var item = arr[key];
if(typeof item != "object") {
oneLevel[key] = item;
} else {
multiLevel = multiLevel.concat(item);
}
}
for(var i in multiLevel) {
for(var j in oneLevel) {
multiLevel[i][j] = oneLevel[j];
}
}
return multiLevel;
}
下面是测试的小提琴链接
尝试以下方法:
尝试使用
Array.prototype.map()
,作为循环中的Array.prototype.forEach()
var数据={
“字段1”:“ALNT12345”,
“字段2”:“ALNT345346”,
“字段3”:“2015353423”,
“字段4”:“2332124343”,
“arrayfield1”:[
{
“arr1”:“625347”,
“arr2”:“rere”
},
{
“arr1”:“634441”,
“arr2”:“sdfsd”
}
]
};
var res=data.arrayfield1.map(函数(val,键){
var obj={};
用于(数据中的var i){
if(!Array.isArray(数据[i])){
obj[i]=数据[i]
}
}
变量名称=Object.keys(val);
name.forEach(函数(值、索引){
obj[名称[索引]]=val[值]
})
返回obj
});
console.log(JSON.stringify(res,null,4))
试试这个:-
var x = {
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arrayfield1": [
{
"arr1": "625347",
"arr2": "rere"
},
{
"arr1": "634441",
"arr2": "sdfsd"
}
]
};
var arr = [];
if(x.hasOwnProperty('arrayfield1')) {
x.arrayfield1.forEach(function(obj1){
var obj = JSON.parse(JSON.stringify(x));
delete obj.arrayfield1;
for(key in obj1) {
obj[key] = obj1[key];
}
arr.push(obj);
});
}
console.log(arr);