JSON-путь для возврата всех полей из массива JSON-ввода?
Мне нужен путь JSON, чтобы вернуть все поля при вводе массива JSON. Это похоже на преобразование массива JSON в плоский файл JSON.
Ввод массива JSON:
{
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arrayfield1": [
{
"arr1": "625347",
"arr2": "rere"
},
{
"arr1": "634441",
"arr2": "sdfsd"
}
]
}
Вышеуказанный массив json должен быть преобразован в 2 записи, как показано ниже. Итак, я пытаюсь добиться этого с помощью пути JSON.
Требуемый выход:
[
{
"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 для возврата всех полей.
Благодарю.
4 ответа
Вы можете попробовать это:
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;
}
Ниже приведена ссылка для тестирования
Попробуй это:-
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);
Попробуйте использовать Array.prototype.map()
, for in
петля, Array.prototype.forEach()
var data = {
"field1": "ALNT12345",
"field2": "ALNT345346",
"field3": "2015353423",
"field4": "2332124343",
"arrayfield1": [
{
"arr1": "625347",
"arr2": "rere"
},
{
"arr1": "634441",
"arr2": "sdfsd"
}
]
};
var res = data.arrayfield1.map(function(val, key) {
var obj = {};
for (var i in data) {
if (!Array.isArray(data[i])) {
obj[i] = data[i]
}
}
var names = Object.keys(val);
names.forEach(function(value, index) {
obj[names[index]] = val[value]
})
return obj
});
console.log(JSON.stringify(res, null, 4))
Попробуйте что-то вроде:
var ob = [];
data.arrayfield1.forEach(function(item) {
var keys = Object.keys(data);
var e = {};
keys.forEach(function(key){
if(Object.prototype.toString.call(data[key]) != '[object Array]')
{
e[key] = data[key];
}
var subkeys = Object.keys(item)
subkeys.forEach(function(_subkeys){
e[_subkeys] = item[_subkeys];
});
});
ob.push(e);
});