个人笔记记录
下载LitJson:https://litjson.net
LitJson比UnityJson自带的功率低。
在GitHub里面下载litjson:
下载后打开src文件里面的LitJson文件
只保留里面的.cs文件,其余的删除
把LitJson文件复制到Unity中,到进入有报一个Warning警告点进去把警告的那行删除即可。
新建一个json文件,试用[1,2,3]能否输出来。创建一个C#文件,引入LitJson。将json文件中的列表元素导出,获得Json数据(类似C#的数据):JsonMapper.ToObject<>();
using LitJson;
public class Lit_item : MonoBehaviour
{
void Start()
{
TextAsset asset = Resources.Load<TextAsset>("JSON/lit_item");
string json = asset.text;
List<int> js =JsonMapper.ToObject<List<int>>(json);
Debug.Log(js[0]);
}
}
unity中TextAssert支持的文件有:
当把对象当成字典使用需要键和值的类型一致。
将json文件中的数据总的转成C#数据,在进行输出打印
void PJData()
{
TextAsset asset = Resources.Load<TextAsset>("JSON/LitJson/table");
string json = asset.text;
//总的数据
JsonData js = JsonMapper.ToObject<JsonData>(json);
JsonData row = js[1];
Debug.Log(row["Name"]);//第二个数据的名字
//循环打印出数据
if (js.IsArray)
{
for (int i = 0; i < js.Count; i++)
{
Debug.Log((int)js[i]["ID"]);
Debug.Log(js[i]["Name"].ToString());
}
}
}
将C#数据转换为Json数据(JsonMapper.ToJson)
列表->Json :JsonMapper.ToJson(new List<int>(){12,123,1234})
字典->json :JsonMapper.ToJson(new Dictionary<string,int>(){{"aa",1122},{"bb",2233},{"cc",3344}})
任意类型->json:
JsonData b = new JsonData();
b["u"] = 13;
b["n"] = "san";
b["is"] = false;
b["nu"] = null;
Debug.Log(b.ToJson());
结果:
JSON数据修改
unity中有个特殊的写入目录:Application类(C#的API)
查看写入文件目录位置:Debug.Log(Application.persistentDataPath);
会随着项目的不同而变化
判断文件是否存在,没有就创建该文件并且写入内容,有就读取其中的内容:
//判断文件是否存在
if (!File.Exists(path))
{
//写入文件所有内容
File.WriteAllText(path,"hello");
}
else
{
//读取文件内容
File.ReadAllText(path);
}
使用LitJson修改文件中的数据
修改前:
修改后:
//判断文件是否存在
if (!File.Exists(path))
{
//写入文件所有内容
File.WriteAllText(path,"[1,2,3]");
}
else
{
//读取json文件内容(json字符串)
string contents=File.ReadAllText(path);
//将json字符串转为json数据
JsonData data = JsonMapper.ToObject(contents);
//修改数据
data[2] = 400;
//修改的数据转换成字符串再写入
File.WriteAllText(path,data.ToJson());
}
JsonData是引用数据类型,对象的修改会直接影响原始数据
XML(基本不用)限制太多,性能不好