[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
下一篇:
相关文章
-
无相关信息