Вопрос по javascript, json – Как извлечь объект json, который находится внутри объекта json

9

Преобразуйте это:

<code>{"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"}
</code>

К этому:

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

Я нашел ответ, который почти делает то, что мне нужно:Поиск объекта внутри JSON, Но этот ответ мне не помогает, потому что он только на первом уровне (один объект json). Моя проблема на втором уровне (объект json внутри объекта json). Заранее спасибо!

извини, исправил! mrmo123
{"BLE89-A0-123-384", "3"; "BLE10-A0-123-321", "4"} Это даже не допустимый объект, это должна быть пара ключ-значение. aziz punjani
@ Я не ... Я не знал, какой путь мне придется пройти от начала до конца. mrmo123
Какая Не ты знаешь как это сделать? Вы знаете, как получить доступ к элементу массива или объекта? Вы знаете, как перебрать массив? Знаете ли вы, как создать объект и назначить ему новые пары ключ / значение? Было бы хорошо точно знать, с чем вам нужна помощь. user1106925

Ваш Ответ

3   ответа
28

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

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

Нотация

Точечная запись выглядит следующим образом

myObject.name

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

Обозначение скобки (может быть другое имя)

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 формат сами, но в твоем примере вот несколько подсказок ...

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

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

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

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

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

Ты, наверное, знаешь это[] с, запятые внутри означает массив.

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

var myResponse = JSON.parse(response);

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

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.

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

{
    "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.

+ 1 для подробного объяснения. aziz punjani
спасибо за отличный ответ! mrmo123
Вау, это гораздо более тщательный ответ, чем я ожидал на вопрос: D epidemian
0


var newJSON = {};
for (var i = 0; i < oldJSON.items.length; i++) {
  newJSON[oldJSON.items[i].id] = oldJSON.items[i].quantity;
}
.length() должно быть.length. Длина - это свойство, а не функция. aziz punjani
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;
}

Похожие вопросы