#jquery #json
#jquery #json
Вопрос:
В принципе, у меня есть список стран с широтой и долготой, и я хочу рассчитать расстояние между двумя странами. Поэтому я поместил эту информацию в файл JSON, который выглядит следующим образом
[
{
"country":"China",
"latitude":35.0,
"longitude":105.0,
"continent":"Asia"
},
{
"country":"India",
"latitude":20.0,
"longitude":77.0,
"continent":"Asia"
},
...
]
Затем я загружаю этот файл в jQuery: $.getJSON( 'countries.json', function(data){ var json = data; });
И теперь я хотел бы получить конкретную информацию так же просто, как json.China.longitude
. Я знаю, что это так не работает, но какой был бы самый простой способ?
Вычисление расстояния на основе координат GPS — это другое дело, но я уже нашел функцию для этого.
Ответ №1:
Было бы лучше обновить countries.json
, чтобы вернуть объект со страной в качестве ключа, поскольку это сэкономит вам некоторое время поиска. В противном случае вам придется перебирать массив. Вы могли бы использовать native filter
var china = json.filter(function (elem) {
return elem.country == "China";
})[0];
Или вы могли бы использовать что-то вроде Underscore.js
Комментарии:
1. Поскольку может показаться, что OP использует country в качестве своего рода ключа, я бы рекомендовал использовать
_.find
вместо_.where
.2. Можно ли сделать country ключом автоматическим способом — я имею в виду изменить структуру моего файла JSON?
Ответ №2:
Если вы хотите это сделать, вам было бы лучше изменить свой JSON на более похожий, если это возможно, конечно.
[
{
"China": {
"latitude": 35,
"longitude": 105,
"continent": "Asia"
},
"India": {
"latitude": 20,
"longitude": 77,
"continent": "Asia"
}
}
]
Комментарии:
1. Это было бы идеально. Можно ли автоматически изменить мой JSON на это?
2. Ну, я не знаю, создаете ли вы файл самостоятельно или получаете его откуда-то еще. В последнем случае вы могли бы прочитать файл и для каждой записи получить страну в качестве ключа для массива, а затем json_encode и записать его для записи в другой файл