Unity3d基础学习第11天

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的字符串比较适否一样来确定。

猜你喜欢

转载自blog.csdn.net/JingDuiTell/article/details/88814991