Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Помогите разобрать JSON (https://javascript.ru/forum/events/71378-pomogite-razobrat-json.html)

smart-create 14.11.2017 12:05

Помогите разобрать JSON
 
Добрый день. В ответе от сервера имеется вот такой JSON

{
        card: 10000013
        code: 752
        dt: "2017-11-20 18:03:00"
        id: 903398
        notifies: Array(3)
                0:{id: 9161, sended_at: "2017-11-14 09:28:46", params: 0}
                1:{id: 9162, sended_at: "2017-11-18 18:03:00", params: 0}
                2:{id: 9163, sended_at: "2017-11-20 16:03:00", params: 0}
        notify: {id: 10, code: 752, caption: "Брюшная полость", info: "Вы                 записаны на Брюшная полость. За 6 часов до этог…ния нельзя принимать пищу, за 4 часа нельзя пить."}

        price: {id: 101850, code: 752, name: "Черевна порожнина", nameRu: "УЗИ брюшной полости (дети)", text: "", …}
        sended_at:null
}


Это уведомление о записи на прием. Из этого всего мне нужны значения которые находятся внутри массива notifies.

Сложность в том что таких уведомлений может быть с десяток за раз.
Самый простой способ прогнать ответ от сервера через несколько циклов for и таким образом достучатся до значений в notifies, но при условии что таких уведомлений может быть больше 10 такой цикл станет настоящим адом для устройства клиента.

Подскажите пожалуйста как сделать это более лаконично? Быть может есть способ вырезать из всего ответа параметры которые находятся в notifies и запихнуть в отдельный массив, то есть что бы получилось вот так:

{
        {id: 9161, sended_at: "2017-11-14 09:28:46", params: 0}
        {id: 9162, sended_at: "2017-11-18 18:03:00", params: 0}
        {id: 9163, sended_at: "2017-11-20 16:03:00", params: 0}
        //.... и т.д.
}

Nexus 14.11.2017 12:14

Цитата:

Сообщение от smart-create
        notifies: Array(3)
                0:{id: 9161, sended_at: "2017-11-14 09:28:46", params: 0}
                1:{id: 9162, sended_at: "2017-11-18 18:03:00", params: 0}
                2:{id: 9163, sended_at: "2017-11-20 16:03:00", params: 0}

Что за формат данных?
json + php print_r?

smart-create 14.11.2017 12:27

Nexus, это из консоли вывод. То есть json + console.log()


smart-create 14.11.2017 12:28

вот пример

Nexus 14.11.2017 12:34

smart-create, получить массив массивов "notifies" можно так:
json=json.map(function(item){return item.notifies;});
console.log(json);
//Далее объединяю массивы "notifies"
json=[].concat.apply([],json);
console.log(json);

smart-create 14.11.2017 12:46

Nexus, Большое спасибо. Но это пока всех проблем не решает, у меня выходит вот такая структура

результат

Но мне по сути не нужны все эти массивы в которых еще по n массивов. Существует ли способ свести это все до одного единственного массива в котором будет просто список json объектов?

То есть в моем случае, вот так:

{
        {id: 9161, sended_at: "2017-11-14 09:28:46", params: 0}
        {id: 9162, sended_at: "2017-11-18 18:03:00", params: 0}
        {id: 9163, sended_at: "2017-11-20 16:03:00", params: 0}
        //.... и т.д.
}

Nexus 14.11.2017 12:48

smart-create, смотрите пост №5

smart-create 14.11.2017 13:14

Nexus, большое спасибо, много нового для меня открыли.

Хочу попросить еще с одним, последним вопросом, помочь. Мне нужно из исходного массива, вытащить объект notify и его значение info,
вот оно и запихнуть его в то что получается после всех манипуляций. То есть вот так

smart-create 14.11.2017 13:16

У меня есть идея как это сделать с помощью костылей и циклов, но похоже для этого есть куча методов о которых я ранее не знал(

Nexus 14.11.2017 13:19

smart-create, попробуйте так:
json=[].concat.apply([],json.map(function(item){
	return item.notifies.map(function(obj){
		obj.info=item.notify.info;
		
		return obj;
	});
}));
console.log(json);


Часовой пояс GMT +3, время: 03:02.