Unity自带的JsonUtility我之前使用过,记得有些问题,所以就没有使用,转而使用LitJson。我们首先需要获取LitJson.dll然后放到项目Plugins下供我们的项目引用。下面是我们要解析的json字符串:
{"currentPlayerId": "test", "gameId": "test", "tableHeight": "1000", "timeStamp": "2018-12-06 21:58:34", "tableWidth": "1000", "requestId": "test", "data": [{"right": 255, "bottom":
397, "top": 373, "class": "10", "prob": 0.9994145035743713, "left": 226}, {"right": 201, "bottom": 451, "top": 427, "class": "2", "prob": 0.9997078776359558, "left": 171}, {"right":
639, "bottom": 195, "top": 170, "class": "0", "prob": 0.9980689883232117, "left": 607}]}//770
代码如下:
public void GetData()
{
playerInfo.ResetData();
jsonData = JsonMapper.ToObject(str);
playerInfo.PlayerId = jsonData["currentPlayerId"].ToString();
playerInfo.GameId= jsonData["gameId"].ToString();
jsonData = jsonData["data"];
foreach (JsonData item in jsonData)
{
string id =item["class"].ToString();
float right = float.Parse(item["right"].ToString());
float left = float.Parse(item["left"].ToString());
float top = float.Parse(item["top"].ToString());
float bottom = float.Parse(item["bottom"].ToString());
playerInfo.AddData(id,new Vector4(right,left,top,bottom));
}
}
2019.5.5更
今天做了一个小功能,将数据类里的数据序列化成json格式字符串。其中一部分是保存的位置数据。即vector3。但是报错了,序列化失败。最后发现是数据格式不被litjson支持的原因。我们在jsondata类里可以看到如下:
public JsonData();
public JsonData(bool boolean);
public JsonData(double number);
public JsonData(int number);
public JsonData(long number);
public JsonData(object obj);
public JsonData(string str);
即litjson不支持float类型的数据,所以在序列化的类中我们要改变保存位置信息数据的类型。
2019.4.10更
做了一个对象序列化成字符串,但是在string字串中含有中文,被litjson序列化后会出现中文乱码。需要进一步转换:
string str = System.Text.RegularExpressions.Regex.Unescape( LitJson.JsonMapper.ToJson(mydata));///解决json解析中文乱码问题
使用正则表达式转换乱码。