素材巴巴 > 程序开发 >

[Unity][JAVA][JSON]JSON must represent an object type

程序开发 2023-09-14 15:46:44

JAVA服务器与Unity客户端通过JSON进行数据的通讯,出现的错误。

 

出现这个错误,通常是因为 JAVA的JSON和Unity的JsonUtility识别的JSON是不一样的。具体参照参考资料1和2。

JSON must represent an object type.

下面的这个是JSON数组,错误的

[
 {"world":0,"name":"","equips":[],"characterid":1},
 {"world":0,"name":"543453","equips":["01040002","01060002","01072005","01302000"],"characterid":8}
 ]

 

下面这种是JSON对象,这个JSON对象里面包含了数组,正确的

{
 "role":[{"world":0,"name":"","equips":[],"characterid":1},
 {"world":0,"name":"543453","equips":["01040002","01060002","01072005","01302000"]
 }

 

Unity的JsonUtility通常只能识别JSON对象

在Unity中的代码如下所示:

...
 using UnityEngine;//JsonUtility
 ...
 Start()
 {data1 data1 = JsonUtility.FromJson(msg);//获得单个JSON对象if (data1 == null){Debug.Log("============= data1 == null");}//else {foreach (var r in data1.role){Debug.Log(r.name);}Debug.Log("============= data1 != null");Debug.Log("============= data1:" + data1.ToString());Debug.Log("============= data1.roles.Count:" + data1.role.Length);}//
 }//start end
 ...[System.Serializable]//***
 public class data1//***
 {//public int code;public role[] role;//如果这里写成不是role,而是roles或者是其他的变量名称,那么将无法读取数据。
 }//
 [System.Serializable]//***
 public class role//***
 {public int world;public string name;public string[] equips;public int characterid;
 }//

 


 

数组就填写数组,而不是List

 

出现这种错误的原因,或者是 数组 长度为0。因为变量名称不相同导致。

 Object reference not set to an instance of an object 

类的名字 可以不同,但是 变量名 必须相同,否则会出错。

...
 [System.Serializable]//***
 public class data12345//***
 {//public int code;public role134[] role;//如果这里写成不是role,而是roles或者是其他的变量名称,那么将无法读取数据。
 }//
 [System.Serializable]//***
 public class role134//***
 {public int world;public string name;public string[] equips;public int characterid;
 }//

 

必须序列化,否则出错。

...[System.Serializable]//***
 public class data12345//***
 {
 ...

 

参考资料:

1.

 

Unity_JsonUtility的局限性_086

2.

 

JsonUtility 读取 Json

3.

 

JSON数组,JSON对象,数组的区别

4.

Json数组对象和对象数组

5.

 

JSON到对象错误对象引用未设置为对象实例

6.

7.

 

 


标签:

上一篇: 在Jetpack Compose中使用DropdownMenu 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。