<unity>关于快速的数据读取和存储——JSON(qwq)

从标题的小卖萌就可以看出来这篇是博主倾注了心血的爱的干货٩(๑❛ᴗ❛๑)۶

转载请标明出处


啰啰嗦嗦的背景交代

这些天在写交易系统的时候,需要用到很多物品,它们还是有分类的,不同的有不同的描述。自己第一个想到的就是定义一个物品类,在一个结构体里把所有需要的属性(类别、名字、描述、加成buff啥的)都放进去,大概又可以写好多行了2333。这种方式也是我之前做过的方式,但这一次,博主多思考了一下,能不能把这些可修改的信息从代码中抽离出来,作为一个外部文件,以任何人都好理解和修改的方式存储。博主再一想,emmmmm…外部文件,先想到的就是表格,txt存储。再一想,这读取的时候必然会涉及到字符串、空格什么的处理的,博主觉得不够明朗简洁。就到网上去查阅了关于简洁快速的unity中数据存储的方式——JSON。 关于它,网上的博客教程都不尽相同,而且很乱。在这里,我整合看过的知识,结合自己遇到的问题提出相应的讲解方法,希望大家能够有所收获吧。


首先来介绍下,【摘自百度百科】

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

很惊讶的是,它在游戏服务器间的传输中已经算的是常用的处理方式了。好了,接下来进入正题:

1.JSON语法规则

•数据在键值对中

•数据由逗号分隔
•花括号保存对象
•方括号保存数组

2.JSON的结构

  • 对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
  • 数组:数组在js中是中括号“[]”括起来的内容,数据结构为 [“java”,”javascript”,”vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

3.JSON在unity中使用前的准备

  • JsonUtility:JsonUtility是Untiy5.3后新增的内容,有时会出现莫名其妙的错误:
    JsonUtility.FromJson():把json字符串转成对象.
    JsonUtility.ToJson():把对象转成json字符串.
  • LitJson:LitJson是一个Json的开源项目,这个比较稳定,推荐使用:
    JsonMapper.ToObject():把json字符串转成对象.
    JsonMapper.ToJson():把对象转成json字符串.
    戳这里进官网下载,下载它的.dll文件就够了传送门
    然后把.dll文件放在你的项目的Assets里,如图
    这里写图片描述
    使用的话要注意引入命名空间

以上,就完成了基本的了解和准备工作了。


结合代码介绍

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。
Json创建中writer.WriteObjectStart ();就等同于“{”,writer.WriteObjectEnd ()就等同于“}”,最后要转换成string型,json = writer.ToString ();。解析Json时,JsonData jsonData = JsonMapper.ToObject (json);注意复合Json解析完了是一个数组。

JsonData实现的接口如下:
IJsonWrapper, IList, ICollection, IEnumerable, IOrderedDictionary, IDictionary, IEquatable

string s = "[{'name':'lisi'},{'name':'zhangsan'}]";
string a = "{'name':'aaa'}";
JsonData[] jarr = JsonMapper.ToObject<JsonData[]>(s);
print(jarr. IsArray);//返回true
if(jarr.IsA
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值