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;
}

Ниже приведена ссылка для тестирования

https://fiddle.jshell.net/06zfn55L/2/

Попробуй это:-

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);
});
Другие вопросы по тегам