赞
踩
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;
- }
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。