在日常开发中,会遇到要保存数据,或者发送数据的需求,数据保存通常用Json或者XML,今天我们就来看一下如何在Unity中读写Json数据,以及解析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;
}
1.2.3.4.5.6.7.8.9.10.11.
首先是写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();
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.
对啦,你要新建一个StreamingAssets文件夹,不然会报错:
数据如下:
用网站解析也没有问题:
读取就很简单:
登录后复制
//读取文件
public string ReadData()
{
//string类型的数据常量
string readData = "";
//获取到路径
string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo2.txt";
//读取文件
StreamReader str = File.OpenText(fileUrl);
//数据保存
readData = str.ReadToEnd();
str.Close();
//返回数据
return readData;
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.
来,让我们来获取一下数据看对不对:
登录后复制
void Start()
{
string jsonData = ReadData();
Debug.Log(jsonData);
}
1.2.3.4.5.
看控制台输出:
登录后复制
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);
}
1.2.3.4.5.6.7.8.9.10.
完整代码如下:
登录后复制
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();
}
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.
首先,我们先写一个字段类Person,类里面有string类型的“Name”和int类型的“Grade”,然后写一个"Data1”数据类,里面存放的使我们的字段类Person数组:
登录后复制
[System.Serializable]
class Person
{
public string Name;
public int Grade;
}
[System.Serializable]
class Data1
{
public Person[] Person;
}
1.2.3.4.5.6.7.8.9.10.11.
首先是写Json数据:
登录后复制
//写数据
public void WriteData()
{
//新建一个数据类
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();
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.
对啦,你要新建一个StreamingAssets文件夹,不然会报错:
数据如下:
用网站解析也没有问题:
读取就很简单:
登录后复制
//读取文件
public string ReadData()
{
//string类型的数据常量
string readData = "";
//获取到路径
string fileUrl = Application.streamingAssetsPath+ "\\jsonInfo3.txt";
//读取文件
StreamReader str = File.OpenText(fileUrl);
//数据保存
readData = str.ReadToEnd();
str.Close();
//返回数据
return readData;
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.
来,让我们来获取一下数据看对不对:
登录后复制
void Start()
{
string jsonData = ReadData();
Debug.Log(jsonData);
}
1.2.3.4.5.
看控制台输出:
登录后复制
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);
}
}
1.2.3.4.5.6.7.8.9.10.11.12.
完整代码如下:
登录后复制
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.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.
总结:
1.不要自己写json串,不然一个中括号或者花括号写错就死活解不出来
2.需要先明确自己接收的json串的格式,然后再写自己的数据类
3.如果不牵扯到服务器的数据,都是本地数据的存写的话,最好存写都自己来写
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删