отобразить имя строки json результата json в c # - PullRequest
0 голосов
/ 18 февраля 2019

мой код в единице c #:

IEnumerator Start()
{
    UnityWebRequest wr = UnityWebRequest.Get("http://localhost:55150/api/values");
    yield return wr.SendWebRequest();
    string a = wr.downloadHandler.text;
    Debug.Log(a);
}

Получен ответ от API, следующим образом:

[{"id":1,"name":"Leon","family":"ggg","des":"hhhhastam."},{"id":2,"name":"Ali","family":"dsf","des":"ali joon hastam."}]

как я могу отображать имена в foreach (у меня есть пара, использующая litjson впроект)

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Если вы не хотите писать класс для зеркального отображения всей структуры JSON, вы можете использовать SimpleJSON (скопируйте и вставьте SimpleJSON.cs в ваши активы) и выполните что-то вроде

IEnumerator Start()
{
    UnityWebRequest wr = UnityWebRequest.Get("http://localhost:55150/api/values");
    yield return wr.SendWebRequest();
    string a = wr.downloadHandler.text;
    Debug.Log(a);

    var jsonObject = JSON.Parse(a);
    foreach (var element in jsonObject)
    {
        var elementName = element.Value["name"];
        // do something with elementName 
        Debug.Log(elementName);
    }
}

Обновление: сортировка

Поскольку вы запросили также сортировку: это можно сделать с помощью Linq OrderBy и OrderByDescending .К счастью, SimpleJSON уже имеет реализацию для этого, так что вы можете использовать .Linq, чтобы сделать jsonObject IEnumerable:

using System.Linq;

//...

var jsonObject = JSON.Parse(a);
foreach (var element in jsonObject.Linq.OrderByDescending(kvp => int.Parse(kvp.Value["id"])))
{
    var elementName = element.Value["name"];
    // do something with elementName 
    Debug.Log(elementName);
}

Примечание , что это может вызвать исключения для любогонеправильно отформатированная строка JSON.


В противном случае вам придется реализовать всю структуру как класс (и оболочку, поскольку вы получаете список) и можете использовать Unity JsonUtility

[Serializable]
public class DataList
{
    public List<DataItem> items = new List<DataItem>();
}

[Serializable]
public class DataItem
{
    public int id;
    public string name;
    public string family;
    public string des;
}

и сделать

IEnumerator Start()
{
    UnityWebRequest wr = UnityWebRequest.Get("http://localhost:55150/api/values");
    yield return wr.SendWebRequest();
    string a = wr.downloadHandler.text;
    Debug.Log(a);

    DataList dataList = JsonUtility.FromJson<DataList>(a);

    foreach (DataItem item in dataList.items)
    {
        // do something with element.name 
        Debug.Log(item.name);
    }
}
0 голосов
/ 18 февраля 2019
  1. Определить класс, который представляет каждый элемент списка:

    class Item
    {
        public Item( Int32 id, String name, String family, String des )
        {
            this.Id     = id;
            this.Name   = name;
            this.Family = family;
            this.Des    = des;
        } 
    
        public Int32  Id     { get; }
        public String Name   { get; }
        public String Family { get; }
        public String Des    { get; }
    }
    
  2. Десериализовать с использованием Json.NET (Newtonsoft.Json)

    using Newtonsoft.Json;
    
    // ...
    
    String jsonText = wr.downloadHandler.text;
    List<Item> itemList = JsonConvert.DeserializeObject<List<Item>>( jsonText );
    
    foreach( Item item in itemList )
    {
        Debug.Log( item.Name );
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...