1.10 Unity中的数据存储 JSON

2024-01-11 08:28
文章标签 数据 json 存储 unity 1.10

本文主要是介绍1.10 Unity中的数据存储 JSON,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、介绍

  • 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 <StudentsItem > 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值对象,存储⼀个ValueJsonValue jsonPosition = "10,20,30";//JSON对象,也就是⼤括号,添加⼀个key:valuejsonTransform.Add("position", jsonPosition);//打印结果Debug.Log(jsonTransform.ToString());//定义⼀个值数组,⽤来存储,中括号中的⼀个个的值JsonValue[] rotationXYZ = new JsonValue[] { 20, 30, 40 };//将这个数组中的⼀个个的值放到JsonArray数组对象中JsonArray jsonRotation = new JsonArray(rotationXYZ);//⼀个JsonArray对象,也可以是⼀个Value,//所以可以⽤jsonTransform来AddjsonTransform.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;}//将数据转成jsonstring 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<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;}
}

这篇关于1.10 Unity中的数据存储 JSON的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593736

相关文章

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和业务增长。 数字化转型行业小伙伴可以加入我的星球,初衷成为各位数字化转型参考库,星球内容每周更新 个人工作经验资料全部放在这里,包含数据治理、数据要

如何在Java中处理JSON数据?

如何在Java中处理JSON数据? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Java中如何处理JSON数据。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在现代应用程序中被广泛使用。Java通过多种库和API提供了处理JSON的能力,我们将深入了解其用法和最佳

两个基因相关性CPTAC蛋白组数据

目录 蛋白数据下载 ①蛋白数据下载 1,TCGA-选择泛癌数据  2,TCGA-TCPA 3,CPTAC(非TCGA) ②蛋白相关性分析 1,数据整理 2,蛋白相关性分析 PCAS在线分析 蛋白数据下载 CPTAC蛋白组学数据库介绍及数据下载分析 – 王进的个人网站 (jingege.wang) ①蛋白数据下载 可以下载泛癌蛋白数据:UCSC Xena (xena

中国341城市生态系统服务价值数据集(2000-2020年)

生态系统服务反映了人类直接或者间接从自然生态系统中获得的各种惠益,对支撑和维持人类生存和福祉起着重要基础作用。目前针对全国城市尺度的生态系统服务价值的长期评估还相对较少。我们在Xie等(2017)的静态生态系统服务当量因子表基础上,选取净初级生产力,降水量,生物迁移阻力,土壤侵蚀度和道路密度五个变量,对生态系统供给服务、调节服务、支持服务和文化服务共4大类和11小类的当量因子进行了时空调整,计算了

mysql中存储过过程和游标的联合使用

1.SQL如下: DELIMITER //DROP PROCEDURE IF EXISTS PrintAllEmployeeNames5;CREATE PROCEDURE PrintAllEmployeeNames5()BEGINDECLARE error_count INT DEFAULT 0;DECLARE num INT ;DECLARE done INT DEFAULT

直接得到Json串,转换为字典

0.新创建一个json文件,把json串拷贝到里面 1.先通过MainBundle找到资源对应的路径 2.将文件转换为NSData 3.通过NSJSonSerization得到字典 NSString*fileName=[[NSBundle mainBundle] pathForResource:@"myJson" ofType:@"json"];           NS

【Unity Shader】片段着色器(Fragment Shader)的概念及其使用方法

在Unity和图形编程中,片段着色器(Fragment Shader)是渲染管线中的一个阶段,负责计算屏幕上每个像素(片段)的颜色和特性。片段着色器通常在顶点着色器和任何几何处理之后运行,是决定最终像素颜色的关键步骤。 Fragment Shader的概念: 像素处理:片段着色器处理经过顶点着色器和几何着色器处理后,映射到屏幕空间的像素。颜色计算:它计算每个像素的颜色值,这可能包括纹理采样、光

【Unity Shader】Alpha Blend(Alpha混合)的概念及其使用示例

在Unity和图形编程中,Alpha Blend(也称为Alpha混合)是一种用于处理像素透明度的技术。它允许像素与背景像素融合,从而实现透明或半透明的效果。Alpha Blend在渲染具有透明度的物体(如窗户、玻璃、水、雾等)时非常重要。 Alpha Blend的概念: Alpha值:Alpha值是一个介于0(完全透明)和1(完全不透明)的数值,用于表示像素的透明度。混合模式:Alpha B