[英]Deserializing JSON issue
我需要反序列化從服務器返回的 JSON 字符串的一部分。 下面的 JSON 字符串中的“myData”部分。
我的 JSON 字符串的結構如下。
{
"data": {
"CODE": {
"someData": {
"h": "foo",
"id": "City",
"lat": "11.11111"
},
"feedMe": [
[
{
"myData": {
"item1": "a",
"item2": "b",
"item3": "c"
},
"moreData": {}
}
]
]
}
}
}
在 Unity 中有 JSONutility.FromJson 方法https://docs.unity3d.com/ScriptReference/JsonUtility.FromJson.ZFC35FDC70D5FC69D269883A822C7A53
但不確定我會怎么做
1 僅將“myData”部分傳遞給此方法。
或者
2 反序列化整個字符串
使用JsonUtility
的替代方法有一個很好的舊SimpleJSON
,它允許您僅訪問 json 的某個字段,例如
var N = JSON.Parse(the_JSON_string);
var myData = N["data"]["CODE"]["feedMe"][0][0];
var item2 = myData["item2"].Value;
通常,為您的 json 獲取所需的 c# class 結構的最簡單方法是始終使用json2csharp
並使所有類[Serializable]
並刪除{get; set;}
{get; set;}
為了使用字段而不是屬性。 像這樣的東西
[Serializable]
public class SomeData
{
public string h;
public string id;
public string lat;
}
[Serializable]
public class CODE
{
public SomeData someData;
public List<List<MyData>> feedMe;
}
[Serializable]
public class MyData
{
public string item1;
public string item2;
public string item3;
}
[Serializable]
public class Data
{
public CODE CODE;
}
[Serializable]
public class RootObject
{
public Data data;
}
如果你願意,你也可以使用T[]
而不是List<T>
。 class 名稱實際上並不重要,但結構和字段名稱必須匹配。
然后使用
var root = JsonUtility.FromJson<RootObject>(THE_JSON_STRING);
var myData = root.data.CODE.feedMe[0][0];
var item2 = myData.item2;
正如已經評論過的那樣,您的數組中有一個嵌套數組..不確定這是否是有意的。
好吧,使用強大的 json nuget -newtonsoft.json 之一,然后在您的代碼中您可以迭代如下值
var files = JObject.Parse(YourJSON);
var recList = files.SelectTokens("$..data").ToList();
foreach (JObject obj in recList.Children())
{
foreach (JProperty prop in obj.Children())
{
var key = prop.Name.ToString();
var value = prop.Value.ToString();
//Do your stuffs here
}
}
JsonUtility 不適用於 json 文件,這僅用於保存和加載某些 class 的基本公共變量。 Asset Store 有許多用於解析 json 的框架。 ps你的 json 很奇怪, [] 它的數組,你有feedMe:[[{myData, moreData}]]
。 一個數組,當數組中只有一個 object... 解析混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.