代码之家  ›  专栏  ›  技术社区  ›  zyonneo

如何使用c_在Unity中使用jsonUtility从给定的json格式获取数据?

  •  0
  • zyonneo  · 技术社区  · 7 年前
    {
    "page": 2,
    "per_page": 3,
    "total": 12,
    "total_pages": 4,
    "data": [
        {
            "id": 4,
            "first_name": "Eve",
            "last_name": "Holt",
            "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"
        },
        {
            "id": 5,
            "first_name": "Charles",
            "last_name": "Morris",
            "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg"
        },
        {
            "id": 6,
            "first_name": "Tracey",
            "last_name": "Ramos",
            "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg"
        }
    ]
    

    }

    上面的JSON是我试图测试的格式,所以我把它添加到一个字符串中,但它显示错误。所以我把它编辑到下面的代码中,去掉了双引号,添加了单引号,现在错误消失了。不一定要使用单引号或双引号。

    string JSONDataString;
    JSONDataString = @"{
    'page': 2,
    'per_page': 3,
    'total': 12,
    'total_pages': 4,
    'data': [
        {
            'id': 4,
            'first_name': 'Eve',
            'last_name': 'last_name',
            'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg'
        },
        {
    
            'id': 5,
            'first_name': 'Charles',
            'last_name': 'Morris',
            'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg'
    
        },
        {
    
            'id': 6,
            'first_name': 'Tracey',
            'last_name': 'Ramos',
            'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg'
    
        }
    ]
    }";
    

    我在字符串的开头使用了@。我不知道为什么要使用它,正如我在一些示例中看到的那样。我删除了所有双引号并添加了单引号。我创建了另一个类来处理下面给出的JSON中的数据。

    public class DataHandler {
    
    
    public int id;
    public string firstname;
    public string lastname;
    public string avatar;
    
    public DataHandler(int ID,string FName,string LName,string Avatar)
    {
        this.id = ID;
        this.firstname = FName;
        this.lastname = LName;
        this.avatar = Avatar;
    
    }
    
    
    }
    

    如何从第一个数组和第二个数组中提取数据。第一个数组元素表示(页,每页…总页数)。第二个数组表示(ID,第一个名称,最后一个名称,来自三个组的虚拟人物)?

    var obj = JsonUtility.FromJson<DataHandler>(JSONDataString);
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   bolkay Miamy    7 年前

    表示JSON的类是错误的。 请参见下面的正确表示:

    public class Datum
    {
        public int id { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string avatar { get; set; }
    }
    
    public class RootObject
    {
        public int page { get; set; }
        public int per_page { get; set; }
        public int total { get; set; }
        public int total_pages { get; set; }
        public List<Datum> data { get; set; }
    }
    

    别忘了将类标记为可序列化。 使用属性:

    [System.Serializable]
    

    使用

    RootObject root=JsonUtility.FromJson<RootObject>(jsonString);
        foreach(var item in root.data){
        Debug.Log(item.id);
        }
    
        2
  •  0
  •   Nikola Babic    7 年前

    表示对象的类不正确。您可以在Visual Studio的“编辑gt;特殊粘贴gt;将JSON粘贴为类”中从JSON生成类。

    在你的情况下,它是:

    public class Rootobject
        {
            public int page { get; set; }
            public int per_page { get; set; }
            public int total { get; set; }
            public int total_pages { get; set; }
            public Datum[] data { get; set; }
        }
    
        public class Datum
        {
            public int id { get; set; }
            public string first_name { get; set; }
            public string last_name { get; set; }
            public string avatar { get; set; }
        }
    

    您的“jsondatastring”json字符串看起来不错,所以只需使用“newtonsoft.json”nuget来解析对象:

    var data = JsonConvert.DeserializeObject<Rootobject>(json);