Использование Json.NET для анализа результатов, возвращаемых API Карт Google - PullRequest
0 голосов
/ 22 сентября 2011

Я пытаюсь использовать веб-сервис API карты Google для создания веб-запроса, получить строку json, а затем получить нужную широту и долготу для входного адреса.

Все хорошо. Я получил нужную строку json.

Теперь я использую Json.net для разбора строки.

Я не знаю почему, но я просто не могу преобразовать его в JArray.

Вот строка json enter image description here

Может кто-нибудь научить меня, как написать код на C #, чтобы получить lat и lng в geometry > location?

Спасибо

Вот мои коды и скриншот ошибки

enter image description here

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

У вас есть несколько вариантов использования JSON.NET для анализа JSON.

Наилучший вариант, IMHO, это использовать сериализацию, чтобы вернуть объект обратно в структурированный тип, которым вы можете манипулировать, как и любым другим классом. Для этого вы можете увидеть сериализацию в документации JSON.NET (я также могу опубликовать более подробную информацию, если это не достаточно ясно).

Если все, что вам нужно, это захватить адрес, как вы указали в своем вопросе, вы также можете использовать функцию LINQ, чтобы получить эту информацию обратно. Вы можете использовать код, подобный следующему, чтобы выполнить его (ключ лежит в методе SelectToken , чтобы получить необходимые детали).

    Dim json As Newtonsoft.Json.Linq.JObject
    json = Newtonsoft.Json.Linq.JObject.Parse(jsonString)
    json.SelectToken("results.formatted_address").ToString()

Вы также можете использовать все обычные возможности Linq для прохождения JSON, как и следовало ожидать. См. Также документацию LINQ.

1 голос
/ 27 августа 2013

[Я понимаю, что это старый вопрос, но случайно он помогает кому-то еще ...]

Проблема здесь в том, что json["results"] - это a JArray, но вы не запрашиваете его как один.Вам нужно использовать индекс массива, чтобы получить первый (и единственный, в данном случае) элемент, затем вы можете получить доступ к объектам внутри него.

string address = json["results"][0]["formatted_address"].Value<string>();

Чтобы получить широту и долготу, вы можете сделать:

JToken location = json["results"][0]["geometry"]["location"];
double lat = location["lat"].Value<double>();
double lng = location["lng"].Value<double>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...