语法规则可以看这篇文章:Unity数据持久化 之 Json 语法速通-CSDN博客
Q:Unity是通过什么来对Json文件进行处理的?
A:JsonUtility:Unity 提供了 JsonUtility
类,用于将对象序列化为 JSON 字符串或将 JSON 字符串反序列化为对象。这是一个轻量级的 API,适用于简单的数据结构
用作示例的数据
public class Person {
//值
public int age;
//数组
public int[] id = { 1, 2, 3 };
//字典
public Dictionary<string, int> dic = new Dictionary<string, int>();
//组合类
public Children children;
//List数组类
public List<Teacher> teacher;
}
public class Children {
public bool isBoy;
}
public class Teacher {
public string course;
public Teacher(string c) {
course=c;
}
}
1.序列化 (代码转json)
JSON(JavaScript Object Notation)序列化是一种基本的概念,用于将 JavaScript 对象或数组等数据结构转换为易于存储的格式,在 JavaScript 中,最常见的序列化格式是 JSON
对例子的数据进行初始化
Person person = new Person();
person.age = 99;
person.dic.Add("男生数量", 10);
person.dic.Add("女生数量", 9);
person.children = new Children(); // 初始化 Children 对象
person.children.isBoy = true;
person.teacher = new List<Teacher>(); // 初始化 Teacher 列表
person.teacher.Add(new Teacher("语文老师"));
person.teacher.Add(new Teacher("数学老师"));
序列化对象
string json = JsonUtility.ToJson(person);
Q:如何保存到硬盘中?(这里我挖个坑,回头总结一下)
可以用简单的方法File类中的静态方法
// 将 JSON 数据保存到文件
string filePath = Path.Combine(Application.persistentDataPath, "example.json");
File.WriteAllText(filePath, json);
Debug.Log($"JSON 数据已保存至:{filePath}");
结果
似乎少了点什么?男女生数量在哪?
经过查询发现JsonUtility的缺点很明显,不但需要【serializable】关键词标记自定义的类(私有),还不支持一些常见数据类型
2.反序列化(json转代码)
JsonUtility 反序列化可以使用JsonUtility.FromJson
不过首先还是要读取json文件
//将 JSON 文件读取并返回成一个字符串
string jsonNew = File.ReadAllText(filePath);
然后就读取,注意泛型内填入你想转成的数据类型(前提是要合理)
person = JsonUtility.FromJson<Person>(jsonNew);