1.10 Unity中的数据存储 JSON 您所在的位置:网站首页 json大括号中还有大括号 1.10 Unity中的数据存储 JSON

1.10 Unity中的数据存储 JSON

2024-06-12 15:15| 来源: 网络整理| 查看: 265

一、介绍 Json是最常用也是目前用的比较多的一种,超轻量级,可便捷性使用,平时用到比较多的都是解析Json和往Json中添加数据、修改数据等等JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式,它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率在Unity中大致有三种使用Json的方式分别是使用类库的两种:System.Json(便于JSON生成)和LitJson(便于JSON解析)还有一种是UnityEngine.Jsonutility其中前两种都需要将System.Json.dll或 LitJson.dll两个dll文件放到Unity的plugins文件夹中才能使用相应的命名空间和方法UnityEngine.JsonUtility则可以直接使用其中的方法 二、语法规则 数据都放置到一个大括号里一对对的数据放到大括号里一个个的数据放到中括号里一个大括号或一个中括号都可以表示一个值数据与数据之间用逗号分隔Key必须要用引号引起来Value如果是字符串要用引号引起来最后一个数据后面不要加逗号数据保存在键值对中

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 students { get; set; } }

由于Json对字符串的格式非常严格,输入一个字符错误都不行,所以我们可以使用相关的Json转换网站进行格式转换 https://www.json.cn/json2csharp.html 这个网站就可以实现JSON数据转实体的功能

三、System.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); } }

打印结果:

五、LitJson

常用API方法如下:

把对象转化成JSON格式字符串:JsonMapper.ToJson把JSON格式字符串转化成对象:JsonMapper.ToObject把JSON格式字符串转化成指定类的对象:JsonMapper.ToObject

1.生成

我们写一个字段类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(); } } }

2.解析

先读取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(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 2018-2019 实验室设备网 版权所有