【Unity3D日常】Unity写Json数据,以及在Unity读取、解析Json数据
2019-09-26 15:43
6289 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/q764424567/article/details/101448124
一、前言
在日常开发中,会遇到要保存数据,或者发送数据的需求,数据保存通常用Json或者XML,今天我们就来看一下如何在Unity中读写Json数据,以及解析Json数据,包括多段数据的解析
二、单条Json数据的读写、解析
1.单条Json数据的写入
首先,我们先写一个字段类Person,类里面有string类型的“Name”和int类型的“Grade”,然后写一个"Data”数据类,里面存放的使我们的字段类Person:
[System.Serializable] class Person { public string Name; public int Grade; } [System.Serializable] class Data { public Person Person; }
首先是写Json数据:
//写数据 public void WriteData() { //新建一个字段类 进行赋值 Person m_Person = new Person(); m_Person.Name = "User1"; m_Person.Grade = 13; //新建一个数据类 将字段类赋值 Data m_Data = new Data(); m_Data.Person = m_Person; //将数据转成json string js = JsonUtility.ToJson(m_Data); //获取到项目路径 string fileUrl = Application.streamingAssetsPath + "\\jsonInfo2.txt"; //打开或者新建文档 StreamWriter sw = new StreamWriter(fileUrl); //保存数据 sw.WriteLine(js); //关闭文档 sw.Close(); }
对啦,你要新建一个StreamingAssets文件夹,不然会报错:
数据如下:
用网站解析也没有问题:
2.单条Json数据的读取
读取就很简单:
//读取文件 public string ReadData() { //string类型的数据常量 string readData = ""; //获取到路径 string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo2.txt"; //读取文件 StreamReader str = File.OpenText(fileUrl); //数据保存 readData = str.ReadToEnd(); str.Close(); //返回数据 return readData; }
来,让我们来获取一下数据看对不对:
void Start() { string jsonData = ReadData(); Debug.Log(jsonData); }
看控制台输出:
3.单条Json数据的解析
void Start() { string jsonData = ReadData(); Debug.Log(jsonData); //数据解析并把数据保存到m_PersonData变量中 Data m_PersonData = JsonUtility.FromJson<Data>(jsonData); //读取数据 Debug.Log(m_PersonData.Person.Name); Debug.Log(m_PersonData.Person.Grade); }
完整代码如下:
using System.IO; using UnityEngine; [System.Serializable] class Person { public string Name; public int Grade; } [System.Serializable] class Data { public Person Person; } public class TestToJson : MonoBehaviour { void Start() { //WriteData(); string jsonData = ReadData(); Debug.Log(jsonData); Data m_PersonData = JsonUtility.FromJson<Data>(jsonData); Debug.Log(m_PersonData.Person.Name); Debug.Log(m_PersonData.Person.Grade); } //读取文件 public string ReadData() { string readData = ""; string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo2.txt"; StreamReader str = File.OpenText(fileUrl); readData = str.ReadToEnd(); str.Close(); return readData; } //写数据 public void WriteData() { Person m_Person = new Person(); m_Person.Name = "User1"; m_Person.Grade = 13; Data m_Data = new Data(); m_Data.Person = m_Person; string js = JsonUtility.ToJson(m_Data); string fileUrl = Application.streamingAssetsPath + "\\jsonInfo2.txt"; StreamWriter sw = new StreamWriter(fileUrl); sw.WriteLine(js); sw.Close(); } }
三、多条Json数据的读写、解析
1.多条Json数据的写入
首先,我们先写一个字段类Person,类里面有string类型的“Name”和int类型的“Grade”,然后写一个"Data1”数据类,里面存放的使我们的字段类Person数组:
[System.Serializable] class Person { public string Name; public int Grade; } [System.Serializable] class Data1 { public Person[] Person; }
首先是写Json数据:
//写数据 public void WriteData() { 4000 //新建一个数据类 Data1 m_Data = new Data1(); //新建一个字段类 进行赋值 m_Data.Persons = new Person[5]; for (int i = 0; i < 5; i++) { Person m_Person = new Person(); m_Person.Name = "User" + i; m_Person.Grade = i + 50; m_Data.Persons[i] = m_Person; } //将数据转成json string js = JsonUtility.ToJson(m_Data); //获取到项目路径 string fileUrl = Application.streamingAssetsPath + "\\jsonInfo3.txt"; //打开或者新建文档 StreamWriter sw = new StreamWriter(fileUrl); //保存数据 sw.WriteLine(js); //关闭文档 sw.Close(); }
对啦,你要新建一个StreamingAssets文件夹,不然会报错:
数据如下:
用网站解析也没有问题:
2.多条Json数据的读取
读取就很简单:
//读取文件 public string ReadData() { //string类型的数据常量 string readData = ""; //获取到路径 string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo3.txt"; //读取文件 StreamReader str = File.OpenText(fileUrl); //数据保存 readData = str.ReadToEnd(); str.Close(); //返回数据 return readData; }
来,让我们来获取一下数据看对不对:
void Start() { string jsonData = ReadData(); Debug.Log(jsonData); }
看控制台输出:
3.多条Json数据的解析
void Start() { string jsonData = ReadData(); Debug.Log(jsonData); //数据解析并把数据保存到m_PersonData1 变量中 Data1 m_PersonData1 = JsonUtility.FromJson<Data1>(jsonData); foreach (var item in m_PersonData1.Persons) { Debug.Log(item.Name); Debug.Log(item.Grade); } }
完整代码如下:
using System.IO; using UnityEngine; [System.Serializable] class Person { public string Name; public int Grade; } [System.Serializable] class Data { public Person Person; }[System.Serializable] class Data1 { public Person[] Persons; } public class TestToJson : MonoBehaviour { void Start() { //WriteData2(); //WriteData3(); //单条数据 //string jsonData = ReadData(); //Debug.Log(jsonData); //Data m_PersonData = JsonUtility.FromJson<Data>(jsonData); //Debug.Log(m_PersonData.Person.Name); //Debug.Log(m_PersonData.Person.Grade); //多条数据 string jsonData = ReadData(); Debug.Log(jsonData); Data1 m_PersonData1 = JsonUtility.FromJson<Data1>(jsonData); foreach (var item in m_PersonData1.Persons) { Debug.Log(item.Name); Debug.Log(item.Grade); } } //读取文件 public string ReadData() { string readData = ""; string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo3.txt"; StreamReader str = File.OpenText(fileUrl); readData = str.ReadToEnd(); str.Close(); return readData; } //写数据 public void WriteData2() { Person m_Person = new Person(); m_Person.Name = "User1"; m_Person.Grade = 13; Data m_Data = new Data(); m_Data.Person = m_Person; string js = JsonUtility.ToJson(m_Data); string fileUrl = Application.streamingAssetsPath + "\\jsonInfo2.txt"; StreamWriter sw = new StreamWriter(fileUrl); sw.WriteLine(js); sw.Close(); } //写数据 public void WriteData3() { Data1 m_Data = new Data1(); m_Data.Persons = new Person[5]; for (int i = 0; i < 5; i++) { Person m_Person = new Person(); m_Person.Name = "User" + i; m_Person.Grade = i + 50; m_Data.Persons[i] = m_Person; } string js = JsonUtility.ToJson(m_Data); string fileUrl = Application.streamingAssetsPath + "\\jsonInfo3.txt"; StreamWriter sw = new StreamWriter(fileUrl); sw.WriteLine(js); sw.Close(); } }
总结:
1.不要自己写json串,不然一个中括号或者花括号写错就死活解不出来
2.需要先明确自己接收的json串的格式,然后再写自己的数据类
3.如果不牵扯到服务器的数据,都是本地数据的存写的话,最好存写都自己来写
相关文章推荐
- unity中从txt文件中读取解析json数据&&unity中json数据写入txt文件
- Unity的Json解析<一>--读取Json文件
- Android的okhttp的post请求,php返回json数据。以及遇到的okhttp dispatcher问题,和json解析遇到的问题
- js读取解析JSON类型数据
- Unity 使用JSON实现本地数据保存和读取
- 教你用jQuery 和 Ajax 解析JSON数据。读取XHR妥妥的
- 仿知乎程序(三)读取webService,解析json,volley以及PullToRefreshListView的使用
- js读取解析JSON类型数据
- Unity:在游戏数据读取中json和xml文档的区别
- UITableView 分页显示、加载更多,数据源远程数据,解析JSON,以及iOS☞Category
- Java 从mango读取数据转为json并解析
- 安卓数据解析之 fastjson 的解析以及Gson解析
- unity请求json数据并解析
- springmvc+ajax+json从页面传数据到后台,以及后台传Map集合到ajax解析
- js读取解析JSON类型数据
- Unity(六) 使用XML/JSON/Binary数据文件封装场景以及StreamingAssets目录的安卓平台同步
- Java解析(读取)Json数据
- Unity 使用MiniJson解析本地数据
- js解析与读取JSON数据
- Unity3D学习(二):使用JSON进行对象数据的存储读取