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

最近在工作中使用到了Json数据在Unity中的生成存储于解析。LitJson在刚开始使用要注意这几个方法:
Unity技术QQ群:484275915,有需要可以加群相互探讨

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

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

private int timer;
private List allJointsData;

private void Start()
{
	allJointsData = new List();
}
//逐帧记录数据
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 这个方法是将字符串转换为相应的泛型的数据,在这里JsonObject是我自己声明的一个结构体,在这段代码的下面。
        JsonObject jo = JsonMapper.ToObject(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 allJointsData)
        {
            this.allJointsData = allJointsData;
        }
        public List allJointsData;
    }

你可能感兴趣的:(unity)