2012-04-28 3 views
7

Convert это:Как извлечь объект JSON, который находится внутри объекта JSon

{"items":[{"id":"BLE89-A0-123-384","weight":"100","quantity":3}, 
      ...  
      {"id":"BLE10-A0-123-321","weight":"100","quantity":4}], 
"country":"JUS", 
"region":"A", 
... 
"timeout":"FILLER"} 

Для этого:

{"BLE89-A0-123-384": "3", "BLE10-A0-123-321": "4"} что ... {ID: количество}

Я нашел ответ что почти делает то, что мне нужно: Searching for an Object inside the JSON. Но этот ответ мне не помогает, потому что он только на первом уровне (один объект json). Моя проблема находится на втором уровне (объект json внутри объекта json). Заранее спасибо!

+1

'{" BLE89-A0-123-384 "," 3 "; «BLE10-A0-123-321», «4»} 'Это даже не действительный объект, он должен быть ключевой парой значений. –

+0

извините, исправлено! – mrmo123

+0

Что * не * вы знаете, как это сделать? Вы знаете, как получить доступ к члену массива или объекта? Вы знаете, как перебирать массив? Вы знаете, как создать объект, и назначить ему новые пары ключ/значение? Было бы хорошо знать, с чем вам нужна помощь. –

ответ

21

Это помогает, если вы не думаете объектов JSON как объекты JSON. После запуска строки JSON через JSON.parse это собственный JavaScript-объект.

В JavaScript есть два способа доступа к объектам.

Dot Notation

Точка обозначения идет, как этот

myObject.name

См точку? Вы можете использовать это для доступа к любому объекту property (который действительно может быть другим объектом в javascript, если у него есть допустимое имя нотации точек). Вы не можете использовать символы, такие как -, . и символ пробела.

Кронштейн Notation (может быть другое название)

myObject["variableName"]

Как точечную нотацию, но допускает некоторые другие символы, как - и пространстве характер .. Есть ли в точности то же самое.

Использование этих обозначений полезно, потому что мы можем получить доступ к вложенным свойствам.

myObj.foo.bar.baz()

Теперь давайте перейдем к объекту JSON ...

{"items":[{"id":"BLE89-A0-123-384","weight":"100","quantity":3,"stock":0},
{"id":"BLE10-A0-123-321","weight":"100","quantity":4,"stock":0}],

Вы можете освежить в JSON format себя, но в вашем примере, вот несколько подсказок .. .

{ Означает начало объекта. (Имейте в виду, что вся ваша строка JSON - это сам объект.)

} Означает конец объекта.

"variable" (с кавычками! Важно в JSON, но не при доступе/объявлении объектов javascript) присваивает свойство вашему объекту.

: Является оператором присваивания как для объектов JSON, так и для JavaScript. Все, что находится справа от :, - это значение, которое вы присваиваете собственности слева.

, Означает, что вы начинаете новое свойство внутри объекта.

Возможно, вы знаете, что [] с , запятыми внутри означает массив.

Когда мы запустим вашу строку через JSON.parse(string), мы получим объект, который выглядит следующим образом ...

var myResponse = JSON.parse(response);

Теперь вы можете использовать его как родной объект JavaScript. То, что вы ищете, - это вложенное свойство внутри «элементов».

var items = myResponse.items; //alternatively you could just use myResponse.items

Поскольку items является массив объектов, мы должны повторять через него для того, чтобы преобразовать существующий объект в новый объект.

var i; 
var result = {} ; //declare a new object. 
for (i = 0; i < items.length; i++) { 
    var objectInResponse = items[i]; //get current object 
    var id = objectInResponse.id; //extract the id. 
    var quantity = objectInResponse.quantity; 
    result[id] = quantity; //use bracket notation to assign "BLE89-A0-123-384" 
    //instead of id. Bracket notation allows you to use the value 
    // of a variable for the property name. 

Результат теперь объект, который выглядит следующим образом:

{ 
    "BLE89-A0-123-384" : 3, //additional properties designated by comma 
    "BLE10-A0-123-321" : 4 // The last key/value in an object literal CANNOT 
    // have a comma after it! 
} 

Вы можете получить доступ к свойствам с помощью квадратных скобок.

var BLE89 = result["BLE10-A0-123-321"]; //use quotes, otherwise JavaScript will try to look up the value of a variable.

+0

+1 для подробного объяснения. –

+0

Ничего себе, это гораздо более тщательный ответ, чем я ожидал на вопрос: D – epidemian

+0

спасибо за отличный ответ! – mrmo123

0

Вам нужно сделать следующее:


var newJSON = {}; 
for (var i = 0; i < oldJSON.items.length; i++) { 
    newJSON[oldJSON.items[i].id] = oldJSON.items[i].quantity; 
} 
+0

'.length()' должно быть '.length'. Длина - это свойство, а не функция. –

2

Вы можете попробовать:

var obj = { 
    "items":[ 
     {"id":"BLE89-A0-123-384","weight":"100","quantity":3}, 
     {"id":"BLE10-A0-123-321","weight":"100","quantity":4} 
    ], 
    "country":"JUS", 
    "region":"A", 
    "timeout":"FILLER" 
}; 

var quantities = {}; 
obj.items.forEach(function (item) { 
    quantities[item.id] = item.quantity; 
}); 

quantities тогда будет объектом {"BLE89-A0-123-384":3,"BLE10-A0-123-321":4}. forEach - это собственный метод объектов массива в JavaScript, который позволяет выполнять итерацию по их элементам. Вы можете захотеть включить эту часть кода в функцию:

function getQuantities(obj) { 
    var quantities = {}; 
    obj.items.forEach(function (item) { 
     quantities[item.id] = item.quantity; 
    }); 
    return quantities; 
} 
+0

спасибо !!!!!! – mrmo123

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