Я изо всех сил пытаюсь получить данные, возвращенные из вызова Geocoding REST ниже (я удалил свои app_id и app_code, поэтому вы не можете запустить URL-адрес, как показано ниже):
https://geocoder.api.here.com/6.2/geocode.json?app_id=[MY APP ID] & app_code = [МОЙ КОД ПРИЛОЖЕНИЯ] & searchtext = chester
Пример ответа можно найти здесь:
https://developer.here.com/documentation/geocoder/topics/quick-start-geocode.html
Я знаю, что он возвращает результаты, но я не могу передать результаты в свое приложение C#, я не знаю, неправильно ли я строю систему классов или есть что-то еще, что я делаю неправильно. Я создал приложение, читающее api мест без проблем, но это как-то кажется другим.
Вызов возвращается со статусом ОК:
public void GeoCode()
{
// BUILD INITIAL STRING BASED ON PARAMETERS
string url = "https://geocoder.api.here.com/6.2/geocode.json?app_id=gpZ1Ym7rwuXs6Xj1TsD8&app_code=4UXmaGFTe30LttFgOY7iqQ&searchtext = " + tbLoc.text;
// RUN THE ASYNCRONOUS COMMAND (I THINK)
StartCoroutine(GetText(url));
}
IEnumerator GetText(string url)
{
// CREATE WEB REQUEST WITH SPECIFIED URL
UnityWebRequest www = UnityWebRequest.Get(url);
// RETURN RESULTS FROM ASYNC COMMAND
yield return www.SendWebRequest();
// PARSE JSON RESPONSE
RootObject RootObject = JsonUtility.FromJson<RootObject>(www.downloadHandler.text);
// IF 200 (STATUS OKAY) GATHER RESULTS, ELSE RETURN ERROR
if (www.responseCode == 200)
{
BuildArray(RootObject);
}
else
{
Debug.Log("Call Failed With Error: " + www.responseCode.ToString());
}
}
private void BuildArray(RootObject RootObject)
{
print(RootObject.Response.View[0].Result[0].Location.Address.Label);
}
Он пытается запустить функцию BuildArray, но возвращает пустую ссылку. (Я просто использую NextPageInformation как самый простой вариант для тестирования)
Ниже представлена структура классов, которую я построил для работы с JSON:
public class Address
{
public string Label { get; set; }
}
public class Location
{
public Address Address { get; set; }
}
public class Result
{
public Location Location { get; set; }
}
public class View
{
public List<Result> Result { get; set; }
}
public class Response
{
public List<View> View { get; set; }
}
public class RootObject
{
public Response Response { get; set; }
}
Может кто-нибудь помочь? Спасибо





У меня лично были проблемы с анализом вложенных объектов json с помощью JsonUtility. Поэтому я перешел на Newtonsoft Json, и он работает очень хорошо. В вашем случае вам нужно пометить классы как сериализованные с помощью [Serializable] глянь сюда
[Serializable]
public class Address
{
public string Label;
}
Привет, я добавил в Serializable, как и в своих предыдущих вызовах JSON (не знаю, как я забыл включить его на этот раз!) Но я все еще получаю нулевую ссылку на этикетке.
Вы можете вставить сюда JSON?
Еще одна вещь, вы создаете RootObject типа RootObject, вам может потребоваться изменить его на rootObject
Я вставил пример JSON в свой исходный пост, спасибо
Если вы хотите проанализировать только одну пару ключ-значение из json, тогда создание структуры классов будет для вас утомительной работой.
Вместо создания структуры классов вы можете Запрос json с помощью Newtonsoft.
Label
ценность.//1
JToken jToken = JToken.Parse(jsonString);
//2
string label = jToken["Response"]["View"][0]["Result"][0]["Location"]["Address"]["Label"].ToObject<string>();
Console.WriteLine(label);
Console.ReadLine();
Вывод: (из вашего образца json, указанного в ссылке)
Примечание: Вам необходимо установить пакет newtonsoft.json из nuget и добавить в свою программу пространство имен ниже.
using Newtonsoft.Json.Linq;
Редактировать:
Если вы хотите проанализировать свой полный json, сначала создайте структуру класса, как показано ниже
public class MetaInfo
{
public DateTime Timestamp { get; set; }
}
public class MatchQuality
{
public int City { get; set; }
public List<double> Street { get; set; }
public int HouseNumber { get; set; }
}
public class DisplayPosition
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public class NavigationPosition
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public class TopLeft
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public class BottomRight
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public class MapView
{
public TopLeft TopLeft { get; set; }
public BottomRight BottomRight { get; set; }
}
public class AdditionalData
{
public string value { get; set; }
public string key { get; set; }
}
public class Address
{
public string Label { get; set; }
public string Country { get; set; }
public string State { get; set; }
public string County { get; set; }
public string City { get; set; }
public string District { get; set; }
public string Street { get; set; }
public string HouseNumber { get; set; }
public string PostalCode { get; set; }
public List<AdditionalData> AdditionalData { get; set; }
}
public class Location
{
public string LocationId { get; set; }
public string LocationType { get; set; }
public DisplayPosition DisplayPosition { get; set; }
public List<NavigationPosition> NavigationPosition { get; set; }
public MapView MapView { get; set; }
public Address Address { get; set; }
}
public class Result
{
public int Relevance { get; set; }
public string MatchLevel { get; set; }
public MatchQuality MatchQuality { get; set; }
public string MatchType { get; set; }
public Location Location { get; set; }
}
public class View
{
public string _type { get; set; }
public int ViewId { get; set; }
public List<Result> Result { get; set; }
}
public class Response
{
public MetaInfo MetaInfo { get; set; }
public List<View> View { get; set; }
}
public class RootObject
{
public Response Response { get; set; }
}
И затем вы можете десериализовать свой json-файл.
RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(jsonString);
Примечание: Вам необходимо добавить в свою программу пространство имен ниже.
using Newtonsoft.Json;
На самом деле я использую довольно много элементов из ответа, это просто тестовая строка, которую я использую, пока я не смогу правильно ее прочитать. Несколько человек уже упомянули Newtonsoft, поэтому я попробую, спасибо.
@KyleJackson, для других ваших элементов вы можете использовать тот же подход, который я дал вам выше, если вы хотите проанализировать полный ответ, я скоро обновлю свой ответ ... если мой ответ был вам полезен, отметьте галочку слева сторона ответа, чтобы он стал зеленым ... :)
@KyleJackson, ответ обновлен. просмотрите раздел Редактировать: в ответе :)
Если бы мне нужно было что-то сделать с кучей json, я бы скопировал его, вставил в QuickType.io и заставил его сгенерировать набор классов и использовать инструкции, а затем вернуть его в свою программу. QuickType настолько хорош, что я хотел бы опубликовать его в качестве ответа, но внешние ресурсы несколько временны и не всегда дают хорошие ответы SO. Однако это должно быть универсальное решение для решения этой проблемы, включая некоторые комментарии типа «вставьте эту строку кода в свое приложение, и все будет просто работать», сгенерированный код справки