Поиск по списку стран с дополнительной информацией

#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 и записать его для записи в другой файл