1、Json文件编辑软件
所有可打开文档的软件都能打开json,常用的有:记事本、Subline Text,网上json编辑器
2、Json语法规则
json的结构是一种键值对形式。
语法规则如下:
//json的注释规则和C#很像,是用//来注释
对象
{ }
数组
[]
键值对对应关系
:
数据分割
,
键名/字符串
""
键值对的表示:
"键名":值内容
值类型有:
数字(整型或者浮点型)、字符串、布尔类型、数组、null、对象
以下示例来理解:
{
"name":"张三",
"age":100
"sex":true,
"ids":[1,2,3,4]
"people":[
{"name":"","age":18,"sex":false},
{"name":"","age":19,"sex":true}
],
"son":null
}
在C#对应的属性为
public class Attribt
{
public string name;
public int age;
public bool sex;
public List<int> ids;
public List<Person> people;
public Person son;
}
public class Person
{
public string name;
public int age;
public bool sex;
}
3、JsonUtlity
JsonUtlity属于Unity中自带的解析json的公共类
1、在文件中存储字符串
File.WriteAllText(Application.persistentDataPath+"/Test.json","存储的测试文件");
第一个参数是存储的路径,第二个是存储的字符串,
第一个存储路径必须存在,否则会报错
2、读取文件中所有字符串
File.ReadAllText(Application.persistentDataPath+"/Test.json");
3、使用jsonutlity进行序列化
方法:JsonUtlity.ToJson(对象);
将对象转换成字符串,再结合前面的写入方法,从而创建出一个json文档。
值得注意的是:
float序列化时会有一定的误差;
自定义类型需要加上序列化特征[System.Serializable];
想要序列化私有变量,需要加上特征[SerializeField];
JsonUtlity不支持字典格式。
JsonUtlity储存null对象不会是null,而是默认值的数据
4、jsonUtlity的反序列化
方法:JsonUtlity.FromJson(string)
String JsonStr=File.ReadAllText(Application.persistentDataPath+"/Test.json");
//然后转换成类对象,有两个写法
Person p=JsonUtllity.FromJson(JsonStr,typeof(Person)) as Person;
Person p=JsonUtlity.FromJson<Person>(JsonStr);
JsonUtlity无法直接读取数据集合,但可以将数据集合在json文件里用某个对象进行包裹这些数据集合,然后再在外部进行反序列化即可。
其次,文本的编码形式得是UTF-8,不然无法加载。
4、LitJson
LitJson是由C#编写,属于一个第三方库,主要用于处理json的序列化和反序列化
和JsonUtlity类似,文本编码形式需是UTF-8,不然无法加载。不同的是LitJson可以直接读取数据集合,不需要对数据集合进行包裹封装。
1、获取Litjson
前往官网找到如下图所示
点进去后点击source如图所示
前面的文件和API,可以查看一些教程和规则,通过此法可自行查找。
点击source会跳转到github,然后自行下载解压就好。
然后解压后找到里面src文件,将这个部分拖进工程当中即可。
2、LitJson的序列化
方法:JsonMapper.ToJson(对象);
相对于JsonUtlity,不需要加特性,支持字典类型,需要引用LitJson命名空间,但还是不能序列化私有变量。
3、LitJson反序列化
方法:JsonMapper.ToObject<TYPE>(string)
LitJson虽然支持字典的序列化相关,但是键如果是数值时可能会有一些问题,最好用字符串类型
其次,反序列化时自定义类型需要无参构造函数,否则反序列化时会报错。