Если вы не хотите писать класс для зеркального отображения всей структуры 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);
}
}