Получение значения из вложенного JSON
Я пытаюсь проанализировать следующие данные JSON и console.log все время для stop_ids определенного значения. Поэтому, когда я выбираю идентификатор остановки "L26S", консоль регистрирует каждый экземпляр, что время остановки происходит в JSON. Время остановки, которое я хотел бы, указано в trip_update.stop_time_update.arrival.time.low
Я попытался использовать следующий метод безуспешно (feed - это имя моего файла JSON), я считаю, что я на правильном пути с этим, но я не знаю, как продолжить. Любая помощь будет оценена.
var feed = {
"entity": [{
"id": "1",
"is_deleted": false,
"trip_update": {
"trip": {
"trip_id": "009250_L..S",
"route_id": "L",
"start_time": null,
"start_date": "20170512",
"schedule_relationship": null,
".nyct_trip_descriptor": {
"train_id": "0L 0132+8AV/RPY",
"is_assigned": true,
"direction": 3
}
},
"vehicle": null,
"stop_time_update": [{
"stop_sequence": null,
"stop_id": "L26S",
"arrival": {
"delay": null,
"time": {
"low": 1494569453,
"high": 0,
"unsigned": false
},
"uncertainty": null
},
"departure": {
"delay": null,
"time": {
"low": 1494569483,
"high": 0,
"unsigned": false
},
"uncertainty": null
},
"schedule_relationship": 0,
".nyct_stop_time_update": {
"scheduled_track": "1",
"actual_track": "1"
}
},
{
"stop_sequence": null,
"stop_id": "L27S",
"arrival": {
"delay": null,
"time": {
"low": 1494569551,
"high": 0,
"unsigned": false
},
"uncertainty": null
}
}
]
}
}]
}
$.each(feed.entity[0].trip_update.stop_time_update[1], function(i, v) {
if (v.stop_id == "L02N") {
console.log(v.arrival.time.low);
return;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
3 ответа
Исправлен ваш JSON и код доступа
- Вы должны были получить доступ к каждому.stop_time_update
- Ваш тест не соответствует ни разу остановок в JSON, который вы дали
- Я обернулся в $(function() {}), чтобы можно было определить сущность ниже кода во фрагменте
$(function() {
$.each(feed.entity[0].trip_update.stop_time_update, function(_, v) {
if (v.stop_id == "L27S") {
console.log(v.arrival.time.low);
return;
}
});
});
var feed = {
"entity": [{
"id": "1",
"is_deleted": false,
"trip_update": {
"trip": {
"trip_id": "009250_L..S",
"route_id": "L",
"start_time": null,
"start_date": "20170512",
"schedule_relationship": null,
".nyct_trip_descriptor": {
"train_id": "0L 0132+8AV/RPY",
"is_assigned": true,
"direction": 3
}
},
"vehicle": null,
"stop_time_update": [{
"stop_sequence": null,
"stop_id": "L26S",
"arrival": {
"delay": null,
"time": {
"low": 1494569453,
"high": 0,
"unsigned": false
},
"uncertainty": null
},
"departure": {
"delay": null,
"time": {
"low": 1494569483,
"high": 0,
"unsigned": false
},
"uncertainty": null
},
"schedule_relationship": 0,
".nyct_stop_time_update": {
"scheduled_track": "1",
"actual_track": "1"
}
},
{
"stop_sequence": null,
"stop_id": "L27S",
"arrival": {
"delay": null,
"time": {
"low": 1494569551,
"high": 0,
"unsigned": false
},
"uncertainty": null
}
}
]
}
}]
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Ошибка в вашем случае заключается в том, что feed.entity[0].trip_update.stop_time_update
это массив, который нужно перебрать (без индекса в конце).
Кроме того, вам не нужен jQuery, используйте нативный js forEach
вместо:
feed.entity[0].trip_update.stop_time_update.forEach(function(e){
if (e.stop_id == "L02N") {
console.log(v.arrival.time.low);
}
})
Вы можете создать объект с ключами, равными именам остановок, и значениями, равными временным меткам. Пример:
const a ={"entity":[{"id":"1","is_deleted":false,"trip_update":{"trip":{"trip_id":"009250_L..S","route_id":"L","start_time":null,"start_date":"20170512","schedule_relationship":null,".nyct_trip_descriptor":{"train_id":"0L0132+8AV/RPY","is_assigned":true,"direction":3}},"vehicle":null,"stop_time_update":[{"stop_sequence":null,"stop_id":"L26S","arrival":{"delay":null,"time":{"low":1494569453,"high":0,"unsigned":false},"uncertainty":null},"departure":{"delay":null,"time":{"low":1494569483,"high":0,"unsigned":false},"uncertainty":null},"schedule_relationship":0,".nyct_stop_time_update":{"scheduled_track":"1","actual_track":"1"}},{"stop_sequence":null,"stop_id":"L27S","arrival":{"delay":null,"time":{"low":1494569551,"high":0,"unsigned":false},"uncertainty":null},}]}}]};
const result = a.entity.reduce((acc, cur, i) =>
Object.assign(acc, cur.trip_update.stop_time_update && cur.trip_update.stop_time_update.reduce((a, c) =>
Object.assign(a, {[c.stop_id]: c.arrival.time.low}), {})), {});
console.log(result)
console.log(result['L26S']) // you can use it like this