2016-12-01 6 views
-6

Это мой ответ:Преобразовать Json массив в обычный формат JSON

{ 
    "item": [{ 
     "key": "name", 
     "value": "john" 
    }, { 
     "key": "number", 
     "value": "1234" 
    }, { 
     "key": "price", 
     "value": [{ 
      "item": [{ 
       "item": [{ 
        "key": "quantity", 
        "value": "20" 
       }, { 
        "key": "price", 
        "value": "200" 
       }] 
      }] 
     }] 
    }] 
} 

необходимо преобразовать как:

{ 
    "name": "john", 
    "number": "1234", 
    "price": { 
     "quantity": "20", 
     "price": "200" 
    } 
} 
+3

Пожалуйста, покажите код и усилия, чтобы попытаться решить проблему себя и обеспечить [mcve] проблемы. – Esko

+0

JSON - это просто текст, описывающий структуру данных. Если вы хотите консолидировать свой массив объектов в один объект, то все, что вам нужно сделать, это сделать рекурсивную функцию, которая создает объект, и выполняет итерацию массива, добавляя новые объекты к объекту, например 'result [arr [ i] .key] = arr [i] .value'. Когда '.value' является новым массивом, сделайте рекурсивный вызов. –

+0

Почему у вас есть свойства вложенных элементов? –

ответ

0

var newjsonobj = {}; 
 
var jsonObj1={"item":[{"key":"name","value":"john"},{"key":"number","value":"1234"},{"key":"price","value":[{"item":[{"key":"quantity","value":"20"},{"key":"price","value":"200"}]}]}]}; 
 
function recursive(jsonObj, newjsonobj) { 
 
\t for (var index in jsonObj) { 
 
\t \t if (typeof jsonObj[index]["value"] === 'object') { 
 
\t \t \t newjsonobj[jsonObj[index]["key"]] = {}; 
 
\t \t \t var temp = jsonObj[index]["value"][0]["item"]; 
 
\t \t \t recursive(temp, newjsonobj[jsonObj[index]["key"]]); 
 
\t \t } else if(jsonObj[index]["key"]){ 
 
\t \t \t newjsonobj[jsonObj[index]["key"]] = jsonObj[index]["value"]; 
 
\t \t } 
 
\t } 
 
} 
 
recursive(jsonObj1["item"], newjsonobj);

0

Вы можете использовать вложенный подход для item и итерации всех массивов и функции вызова iter для каждого массива.

Это решение использует thisArg от Array#forEach для следующего более глубокого уровня объектов для результата.

var data = { "item": [{ "key": "name", "value": "john" }, { "key": "number", "value": "1234" }, { "key": "price", "value": [{ "item": [{ "item": [{ "key": "quantity", "value": "20" }, { "key": "price", "value": "200" }] }] }] }] }, 
 
    result = {}; 
 

 
[data].forEach(function iter(a) { 
 
    if ('item' in a) { 
 
     a.item.forEach(iter, this); 
 
     return; 
 
    } 
 
    if (Array.isArray(a.value)) { 
 
     this[a.key] = {}; 
 
     a.value.forEach(iter, this[a.key]); 
 
     return; 
 
    } 
 
    this[a.key] = a.value; 
 
}, result); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Смежные вопросы