JSON语法示例:
{"students":[
{
"name":"albert",
"age":19,
"sex":"M"
},
{
"name":"mary",
"age":11,
"sex":"W"
}
]
}
解析成实体类后:
public class StudentsItem
{
public string name { get; set; }
public int age { get; set; }
public string sex { get; set; }
}
public class Root
{
public List <StudentsItem > students { get; set; }
}
由于Json对字符串的格式非常严格,输入一个字符错误都不行,所以我们可以使用相关的Json转换网站进行格式转换
https://www.json.cn/json2csharp.html 这个网站就可以实现JSON数据转实体的功能
先来说一下System.Json的基本用法
System.Json是一种类库,当我们在Unity中导入System.Json.dll文件后就可以使用System.Json.dll json命名空间
可以用到的类:JsonArray、JsonObject、JsonPrimitive、JsorValue。枚举:JsonType
具体操作,在Unity中新建一个Plugins文件夹,然后将dll文件放入即可
using System.Json;
using UnityEngine;
public class JsonTest : MonoBehaviour
{
void Start()
{
//创建?个JSON对象,相当于?个?括号
JsonObject jsonTransform = new JsonObject();
//创建?个JSON值对象,存储?个Value
JsonValue jsonPosition = "10,20,30";
//JSON对象,也就是?括号,添加?个key:value
jsonTransform.Add("position", jsonPosition);
//打印结果
Debug.Log(jsonTransform.ToString());
//定义?个值数组,?来存储,中括号中的?个个的值
JsonValue[] rotationXYZ = new JsonValue[] { 20, 30, 40 };
//将这个数组中的?个个的值放到JsonArray数组对象中
JsonArray jsonRotation = new JsonArray(rotationXYZ);
//?个JsonArray对象,也可以是?个Value,
//所以可以?jsonTransform来Add
jsonTransform.Add("rotation", jsonRotation);
//打印结果
Debug.Log(jsonTransform);
JsonObject x = new JsonObject();
x.Add("x", 10);
JsonObject y = new JsonObject();
y.Add("y", 20);
JsonObject z = new JsonObject();
z.Add("z", 30);
//实例?个jsonValues数组(所有类型都可以转换成jsonValue)
JsonValue[] scaleXYZ = new JsonValue[] { x, y, z };
//将实例好了的数组,添加到jsonArray对象中,形成?个jsonArray对象
//作?在于给这个整体,添加?个中括号[]
JsonArray jsonScale = new JsonArray(scaleXYZ);
//将这个整体,放?到jsonTransform中
jsonTransform.Add("scale", jsonScale);
//打印结果
Debug.Log(jsonTransform);
}
}
打印结果:
常用API方法如下:
我们写一个字段类Person,类里面有string类型的"Name"和int型的"Age"
?
using System.IO;
using UnityEngine;
[System.Serializable]
class Person
{
public string Name;
public int Age;
}
[System.Serializable]
class Data
{
public Person[] Person;
}
public class NewBehaviourScript : MonoBehaviour
{
void Start()
{
WriteData();
}
//写数据
public void WriteData()
{
//新建一个数据类
Data m_Data = new Data();
//新建一个字段类 进行赋值
m_Data.Person = new Person[3];
for (int i = 0; i < 3; i++)
{
Person m_Person = new Person();
m_Person.Name = "User" + i;
m_Person.Age = 20 + i;
m_Data.Person[i] = m_Person;
}
//将数据转成json
string js = JsonUtility.ToJson(m_Data);
//获取到项目路径
string fileUrl = Application.dataPath + "\\jsonInfo.txt";
//打开或者新建文档
using (StreamWriter sw = new StreamWriter(fileUrl))
{
//保存数据
sw.WriteLine(js);
//关闭文档
sw.Close();
sw.Dispose();
}
}
}
先读取Json文件,使用IO命名空间下的File类的OpenText()函数进行读取
然后使用JsonUtility.FromJson进行解析
using System.IO;
using UnityEngine;
[System.Serializable]
class Person
{
public string Name;
public int Age;
}
[System.Serializable]
class Data
{
public Person[] Person;
}
public class NewBehaviourScript : MonoBehaviour
{
void Start()
{
string jsonData = ReadData();
Data m_PersonData = JsonUtility.FromJson<Data>(jsonData);
foreach (Person item in m_PersonData.Person)
{
Debug.Log(item.Name);
Debug.Log(item.Age);
}
}
//读取文件
public string ReadData()
{
//string类型的数据常量
string readData;
//获取到路径
string fileUrl = Application.dataPath + "\\jsonInfo.json";
//读取文件
using (StreamReader sr = File.OpenText(fileUrl))
{
//数据保存
readData = sr.ReadToEnd();
sr.Close();
}
//返回数据
return readData;
}
}