u3d中JSON数据处理
一.认识JSON
1.1 Json概述
- JSON(JavaScript Object Notation,JavaScript对象表示法)
- JSON和XML是比较类似的技术,都是用来存储文本信息数据的;相对而言,JSON比XML体积更小巧,但是易读性不如XML。
- JSON是轻量级的文本数据交换格式,可以用于服务器和客户端之间的数据传输的载体;XML也是可以完成这个任务的。
- JSON和XML一样并不是哪一门语言的专属技术,而是通用的,几乎所有编程语言都可以操作和使用JSON,XML相关的数据文件。
- JSON可用于数据存储:以文本文件形式存在于客户端,作为静态数据源使用
- JSON可用于数据传输:服务端将数据以JSON数据的格式传输给客户端,客户端解析后使用
1.2 JSON示例
压缩格式:
[{"id": "15", "name":"Peter"}, {"id": "12"}]
解析格式:
[
{
"id": "15",
"name": "Peter"
},
{
"id": "12"
}
]
收集几个解析网站:
https://www.json.cn/jsononline/
https://www.jsonla.com/
1.3 json语法注意事项
1.当有多个数据对象时,最外层用[]包裹,表示是一个数组;
2.每一对{}表示一个独立的数据对象;
3.json对象内的数据,以键值对的形式存在;
4.json中字符串需要以“”包裹;
5.json中需要用逗号进行数据分割,且最后位置不需要逗号;
二.Unity内使用JSON
1.Assets下创建文件夹Plugins(命名固定,引擎约定用于插件的文件夹)
2.下载LitJson.dll,并将其拖拽至该文件夹内
3.脚本内引入命名空间:using LitJson;
接下来就可以调用Json相关API了
三.Json API演示
下面示例将演示:
- 单对象转Json
- 多对象转Json
- Json转单对象
- Json转多对象(较为常用)
- 构造JsonData对象获取Json
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson; //引入命名空间
public class Player
{
public int ID { get; set; } //自动实现的属性
public string name;
private int lev;
public Player() { } //用于Json转对象,不可或缺
public Player(int _id, string _name, int _lev)
{
ID = _id;
name = _name;
lev = _lev;
}
public string printInfo()
{
return string.Format("id:{0}, name:{1}, lev:{2}", ID, name, lev);
}
}
public class JSONDemo : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Player p1 = new Player(30, "Peter", 10);
Debug.Log(p1.printInfo());
//单对象转Json
string str1 = JsonMapper.ToJson(p1);
Debug.Log("-------------单对象转Json");
Debug.Log(str1);
//多对象转Json
List<Player> playerList1 = new List<Player>();
Player p2 = new Player(31, "Tom", 11);
playerList1.Add(p1);
playerList1.Add(p2);
string str2 = JsonMapper.ToJson(playerList1);
Debug.Log("-------------多对象转Json");
Debug.Log(str2);
//Json转单对象
Player p3 = JsonMapper.ToObject<Player>(str1); //会调用默认构造函数
Debug.Log("-------------Json转单对象");
Debug.Log(p3.printInfo());
//Json转多对象(较为常用)
JsonData jsonData = JsonMapper.ToObject(str2);
List<Player> playerList2 = new List<Player>();
for (int i = 0; i < jsonData.Count; i++)
{
Player temp = JsonMapper.ToObject<Player>(jsonData[i].ToJson());
playerList2.Add(temp);
}
Debug.Log("-------------Json转多对象");
for (int i = 0; i < playerList2.Count; i++)
{
Debug.Log(playerList2[i].printInfo());
}
//构造JsonData对象获取Json
JsonData jd = new JsonData();
jd["id"] = "101";
jd["name"] = "James";
Debug.Log("-------------构造JsonData对象获取Json");
Debug.Log(jd.ToJson());
}
}