(一)建本地Json文件
Unity不能创建Json文件,导入其中的Json文件是由文本文档TXT文件改来的:
新建TXT,打开并“另存为”,在“另存为”界面,修改其文件后缀名为.json、编码方式为UTF-8。
示例:我在桌面上,新建了一个叫“SelfWriteJson”的TXT,修改前后如下
此时可以拖入Unity了,拖入后,在其中写包含三组类变量的一个数组变量
格式为:
{
数组变量studentInfo:
[
{
类变量1
},
{
类变量2
},
{
类变量3
},
]
}
{
"studentsInfo": [
{
"stuNum": "01",
"name": "zhangsan"
},
{
"stuNum": "02",
"name": "lisi"
},
{
"stuNum": "03",
"name": "wangwu"
}
]
}
(二)读取
建数组对应的类、类变量对应的类
using System;
//数组对应的类
[Serializable]
public class WhereArrayInIt
{
public Stu[] studentsInfo;
}
using System;
//类变量对应的类
[Serializable]
public class Stu
{
public string stuNum;
public string name;
}
用JsonUtility.FromJson<>()方法解析Json文件,得到“外层类”(此处的“外层类”是数组所在的类,即WhereArrayInIt类)的对象,然后就可用类对象获取其数组变量,进而可以对数组中的类变量进行遍历,或取得其中的某个变量。
void Start()
{
TextAsset myTextAsset = Resources.Load<TextAsset>("SelfWriteJson");
//得到“外层类”对象(此处的外层类是:WhereArrayInIt类)
WhereArrayInIt whereArrayInIt = JsonUtility.FromJson<WhereArrayInIt>(myTextAsset.text);
foreach(Stu stu in whereArrayInIt.studentsInfo)
{
Debug.Log("学号"+stu.stuNum);
Debug.Log("姓名" + stu.name);
}
transform.Find("StuNumTxt").GetComponent<Text>().text = myJson.studentsInfo[0].stuNum;
}
(三)注意
1、两个解析类并不挂到层级视图的游戏物体上,最后的读取类是在上面的。
2、编辑Json文件时,变量名需要加引号。
3、JsonUtility.FromJson<>()方法并不能直接读取json文件,json文件是用Resources.Load<>()载入转化为TextAsset,JsonUtility.FromJson<>()读取的是TextAsset的text属性。