簡體   English   中英

反序列化 JSON 問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM