Разбить на части JSON

284
19 декабря 2016, 19:35

Есть объект json такого вида:

{ 
"1":{"id":"1","price":"60","qty":"56"}, 
"4":{"id":"4","price":"85","qty":"23"}, 
"2":{"id":"2","price":"53","qty":"11"} 
}

Это возврат $.post из обработчика на PHP.

Как вывести каждую строку отдельно циклом?

И for пробовал, и for..in.

Ключ — число, и из-за этого тоже загвоздка у меня. Как обратиться к price при id=4?

Answer 1

Пример итерации и получение значения по ключу

http://codepen.io/anon/pen/yejeXX

var jsonData = {"1":{"id":"1","price":"60","qty":"56"}, "4":{"id":"4","price":"85","qty":"23"}, "2":{"id":"2","price":"53","qty":"11"}}
$.each(jsonData, function(key, val) {
  $('body').append($('<p>').text('key:'+key+', price:'+val.price));
});
$('body').append('<h4>Price for 4 key is: '+jsonData["4"].price+'</h4>')

Для $.post укажите тип данных который принимает callback

$.post('action', function(data) { 
  console.log(data); 
}, 'json');
Answer 2

Так. Есть у нас объект.

var test = {
"1":{"id":"1","price":"60","qty":"56"},
"4":{"id":"4","price":"85","qty":"23"},
"2":{"id":"2","price":"53","qty":"11"}
};

Отвечу на последний вопрос для начала.

Чтобы обратиться к элементу с числовым ключом - достаточно записать это так, как-будто вы обращаетесь к ассоциативному массиву по ключу. Т.е. к элементу с ключом 4 можно обратиться так: test[4]

Теперь к первому вопросу. Так как это не упорядоченный массив, где ключи начинаются с 0, то конечно проще сделать цикл for..in, который пробегает по всем элементам.

Он будет выглядеть просто:

for (var i in test) {
    console.log(test[i]);
};

где i - это ключ, и, как следует из первой части моего ответа: test[i] обращение к элементу объекта по ключу.

В итоге в консоли можно будет увидеть

Object {id: "1", price: "60", qty: "56"}
Object {id: "2", price: "53", qty: "11"}
Object {id: "4", price: "85", qty: "23"}

Ну и конечно пробегаясь в цикле, чтоб достать значения можно обращаться уже к ключам через привычную точку: test[i].id или test[i].price и так далее

Answer 3

А поему бы на BackEnd'e этого перед выводом не сделать?

$elements = 5;
$results = array_chunk($results, $elements);
echo json_encode($results);

Оно Вам вернет масиив объекто, в котором находится по 5 элементов в каждом.

READ ALSO
Проблема с пагинацией [закрыто]

Проблема с пагинацией [закрыто]

Есть код пагинации, код хороший, но есть нюанс, пагинация начинается со второй страницы, те

203
paypal express checkout не работает с sandbox

paypal express checkout не работает с sandbox

я интегрирую оплату с paypal express checkout по примеру https://devtools-paypalcom/integrationwizard/

185
PDO ошибка выборки c LIMIT

PDO ошибка выборки c LIMIT

Почему выдает ошибку при таком запросе?

282
Запрос POST к VK.com

Запрос POST к VK.com

Вопрос к предыдущей теме: POST запрос к контакту

249