Json文件解析
1.Json 是一种方便进行数据交换的语言方式,可以包含字符串,对象,数组等
2.格式:以键值对的形式出现,通过键去寻找值
用分号分割
用逗号隔开键值对
用{}表示一个对象 {“name” : “libiao”, ”age”:23, ”sex”:”man”}
用[]表示数组[ { “name” : “libiao”, ”age”:23, ”sex”:”man”} ,
{“name” : “luohai”, ”age”:23, ”sex”:”man”}
]
1.应用1
void ParseJson()
{
JsonData date = new JsonData ();
date["name"] = "luohai";
date ["age"] = 23;
date["sex"] = "man";
date ["sister"] = new JsonData ();
date["sister"]["name"] = "yixian";
//date["sister"]["name"] = "yixian"; 覆盖
date ["sister"] ["age"] = 22;
string str = date.ToJson (); //将对象转化成json字符串,序列化
Debug.Log (str);
JsonData stringDate = JsonMapper.ToObject (str); //将json字符串转化成对象 反序列化
Debug.Log (stringDate["name"]);
Debug.Log (stringDate ["sister"]["age"]);
}
注:
1.通过JsonData类创建一个data对象,并赋值
2.通过date.ToJson()方法,将对象转化成json字符串,进行序列化
3.通过JsonMapper.ToObject (str)方法,将字符串转化成JsonData对象,反序列化
commond+R来刷新project面板内容
在路径表示方面windows用的是反斜杠“\”,unix用的是/斜杠
2.应用2
void ParseArray()
{
string str = "{ 'name':'li','age':22," + "'sister':[{'name':'sister1'},{'name':'sister2'}] }";
JsonData date = JsonMapper.ToObject (str);
//string newstr1 = JsonMapper.ToJson (str); 报错
string newstr1 = JsonMapper.ToJson (date); //方法1
Debug.Log (newstr1);
Debug.Log (date ["sister"] [0] ["name"]);
string newstr2 = date.ToJson (); //方法2
Debug.Log (newstr2);
}
注:
1.注意str的写法,单引号的用法
2.通过JsonMapper.ToJson (date)将对象转换成字符串
3. 通过date [“sister”] [0] [“name”]查看妹妹的信息,注意下标
3.应用3
void ParseClass() //写入json文件
{
Level level1 = new Level ();
level1.num = 0;
level1.isLock = false; //bool类型可以直接进行辨别
level1.targetScore = 10;
string leveljson = JsonMapper.ToJson (level1);
Debug.Log (leveljson); //运行结果 {"num":0,"isLock":false,"targetscore":10}
string filePath = Application.dataPath + "/Resources";
string fileName = "MyJson.json";
FileManager.GetInstance ().CreateOrwrite (filePath,fileName,leveljson);
}
4.应用4
void ParseJsonFile() //读json文件
{
//TextAsset json = Resources.Load ("TestJson") as TextAsset ; //第一种方法
//TextAsset json = Resources.Load<TextAsset> ("TestJson");
string filePath = Application.dataPath + "/Resources"; //第二种方法
string fileName = "TestJson.json";
string json = FileManager.GetInstance ().ReadFile (filePath,fileName);
LevelArray levelArray = JsonMapper.ToObject<LevelArray> (json);
//LevelArray levelArray = JsonMapper.ToObject<LevelArray> (json.test);
for (int i = 0; i < levelArray.levelList.Length; i++)
{
Debug.Log (levelArray.levelList [i].num);
Debug.Log (levelArray.levelList [i].isLock);
Debug.Log (levelArray.levelList [i].targetScore);
}
Debug.Log (levelArray.name);
}
5.应用5
void Dele() //删除文件
{
string filePath = Application.dataPath + "/Resources";
string fileName = "TestJson.json";
FileManager.GetInstance ().DeleteFile (filePath,fileName);
}
//文件管理类
public class FileManager
{
private static FileManager _instance;
public static FileManager GetInstance()
{
if (_instance == null)
{
_instance = new FileManager ();
}
return _instance;
}
public void CreateOrwrite(string filePath,string fileName,string fileContent) //创建和写文件
{
string fileFullPath = filePath + "/" + fileName;
File.WriteAllText (fileFullPath, fileContent);//如果文件不存在,则先创建文件后写入,如果文件已经存在,则直接覆盖原来内容
}
public string ReadFile(string filePath,string fileName) //读文件
{
string fileFullPath = filePath + "/" + fileName;
FileInfo info = new FileInfo (fileFullPath); //获取文件信息
if (info.Exists) //存在则读取
{
Debug.Log ("aaaaa");
string str = File.ReadAllText (fileFullPath);
return str;
}
else //否则返回空
{
return string.Empty;
}
}
public void DeleteFile(string filePath,string fileName) //删除文件
{
string fileFullPath = filePath + "/" + fileName;
File.Delete (fileFullPath);
}
}
TXT文件解析
关卡编号|是否上锁|目标分数|时间|星星数|难度
1|false|100|30|5|简单
2|true|150|25|5|中等
3|true|200|20|5|绝望
void ReadText()
{
string filePath = Application.dataPath + "/Resources/level.txt";
//using:使用完成后会自动释放
using (StreamReader sr = new StreamReader (filePath))
{
string str1 = sr.ReadToEnd ();
string[] str2 = str1.Split ('\n');
for (int i =1;i<str2.Length;i++)
{
string[] str3 = str2[i].Split ('|');
for (int t =0;t<str3.Length;t++)
{
Debug.Log (str3[t]);
}
Level level = new Level ();
level.num = int.Parse (str3 [0]);
level.isLock= str3[1] == "true" ;
level.targetScore = int.Parse (str3 [2]);
}
//sr.close(); 加不加都可以
}
}
注:
txt解析:创建txt文件每行不要以数字结尾,最后一行后面不要放置回车。
每行结尾不要有空格。
解析txt文件的时候先使用steamReader读取全部的文件内容。
然后行之间用‘\n’来分割这些行。使用自己定义的分隔符来区分每一行的各个数据。使用一行表示一个对象。
对于bool类型的数据,使用获得string和内容为true或者false的字符串比较适否一样来确定。