您的位置:首页 > Web前端 > JavaScript

使用LitJson.dll生成存储与解析Json

2017-08-11 15:40 525 查看
最近在工作中使用到了Json数据在Unity中的生成存储于解析。LitJson在刚开始使用要注意这几个方法:

JsonData
//JsonData 是用来生成Json数据的时候用的一个类型,可以将数据结构做的相对清晰。
JsonMapper.ToJson()
//JsonMapper.ToJson()是将JsonData格式的数据转换成Json格式字符串的函数。
JsonMapper.ToObject()
//JsonMapper.ToObject()函数返回的是将字符串转换为JsonData类型的数据
JsonMapper.ToObject<T>
//JsonMapper.ToObj
b29d
ect<T> 这个方法是将字符串转换为相应的泛型的数据
JsonData.ToJson()
//JsonData.ToJson()是将JsonData类型的数据转换为字符串的函数


我主要用作每帧都需要储存一条状态数据,所以会存储非常大量的数据,为了方便后来分条解析,我将每帧数据都加入到一个链表中。用法如下所示:

private int timer;
private List<String> allJointsData;

private void Start()
{
allJointsData = new List<String>();
}
//逐帧记录数据
private void Update()
{
JsonParsing();
}

private void JsonDataGenerate()
{
JsonData jd = new JsonData();
jd["Data"] = new JsonData();//新添加一层关系时,需要再次 new JsonData()
for (int i = 0; i < allSaveDataJoints.Count; i++)
{
jd["Data"][i.ToString()] = allSaveDataJoints[i].eulerAngles.ToString();
}
//JsonMapper.ToJson()是将JsonData格式的数据转换成Json格式的字符串。
//这样方便在解析的时候将获取的字符串解析成Json格式的数据。
String tempStr = JsonMapper.ToJson(jd);
allJointsData.Add(tempStr);//逐帧将数据添加到事先声明好的链表中。
timer++;
}


以下是生成的一帧Json数据:

{“0”:”(21.3, 236.0, 109.6)”,”1”:”(5.5, 299.1, 309.5)”,”2”:”(351.3, 310.4, 212.2)”,”3”:”(320.9, 34.5, 358.6)”,”4”:”(40.4, 192.9, 301.6)”,”5”:”(353.3, 119.7, 307.9)”,”6”:”(5.4, 157.1, 103.0)”}

以下是Json解析:

private void JsonDataParsing()
{
//读取本地Txt里面的字符串类型的数据。
TextAsset binAsset = Resources.Load("FirstData", typeof(TextAsset)) as TextAsset;
//JsonMapper.ToObject<T> 这个方法是将字符串转换为相应的泛型的数据,在这里JsonObject是我自己声明的一个结构体,在这段代码的下面。
JsonObject jo = JsonMapper.ToObject<JsonObject>(binAsset.ToString());
//将拿到的完整的String类型的数据逐条划分,因为之前存入结构体的allJointsData是字符串链表结构,所以很容易划分条目。
for (int i = 0; i < jo.allJointsData.Count; i++)
{
//JsonMapper.ToObject()函数返回的是将字符串转换为JsonData类型的数据
//JsonData.ToJson()是将JsonData类型的数据转换为字符串的函数。如果不转换成string类型的数据,还是JsonData类型的数据的话,还可以继续拿取更下层的结构里面的内容如JsonMapper.ToObject(jo.allJointsData[i])["Data"]["1"]等句柄根据自己数据类型的句柄来。
Debug.Log(JsonMapper.ToObject(jo.allJointsData[i])["Data"].ToJson());
}
}
//结构体,方便存储数据,但是我这个数据结构比较简单,按理来说也可以不使用结构体。
public struct JsonObject
{
public JsonObject(List<string> allJointsData)
{
this.allJointsData = allJointsData;
}
public List<string> allJointsData;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 unity json