Unity JSON编码解码之LitJson 深度剖析

这篇具有很好参考价值的文章主要介绍了Unity JSON编码解码之LitJson 深度剖析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

把LitJson的代码库放入到项目中,如图所示:JSON在游戏开发中是一种序列化/反序列化常用的技术,把游戏相关的数据,如地图组成,通过JSON编码,序列化成JSON文本,传输或存储, 要使用的时候再通过JSON技术把文本解析成数据对象,在代码中使用。本文将从以下几个方面详细的深度剖析JSON与LitJson库的编码解码:

(1)什么是JSON;

(2)Unity如何使用LitJson;

(3)LitJson核心源码分析;

1: 什么是JSON

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

  Object: Object在JSON中相当于C#的字典,是一个表,结构为{key1: v1, key2: v2};

  Array: Array在JSON中相当于C#的List,是一个数组,结构为[v0, v1, v2, …];

  Boolean: Boolean在JSON中相当于C#的boolean;

  Double: Double在json中相当于C#的double;

  Float: Float在json中相当于C# float;

  Int: Int在json中相当于C# int;

  Long: Long在json中相当于C# long;

String: String在json中相当于C# string;

接下来看下一个示例的JSON文本:

  { status:0,isActive:false,damond: 100, HP: 65.4, Desic: “丹书铁卷”, [100, false, {..}, [..], “hi”], }

注意: 其中Boolean, Double, Float, Int, Long, String属于基本数据类型,Object, Array属于容器,可以存放数据,Object/Array中可以嵌套Object/Array。

搞懂了JSON的文本格式后,接下来分析下JSON编码解码的基本原理。

编码/序列化: 任何编程语言的数据对象,最终的数据都可以用上面的类型来进行表示,最后把对应的类型生成文本即可。

解码/反序列化: 解析文本的类型符号,比如 {,开头就是Object, [ 开头就是Array, 解析到true,false表示是Boolean类型。

JSON格式标准出来后,几乎每个平台的每种编程语言都有对应的JSON库来做编码解码,不用我们自己来实现,在Unity C#里面我们经常采用LitJson来做JSON文本的编码解码。

2: Unity中如何使用LitJson

  Unity项目中使用LitJson,操作起来也十分简单。接下来我们详细的操作一下,具体步骤如下:

  (1): 创建一个标准的Unity项目,下载LitJson的代码库,我一般会新建一个3rd文件夹,

Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

(2): 编写一个测试节点,挂一个测试代码,用来测试与讲解LitJson库的使用,同时编写一个JsonText.txt的文本资源,作为测试的Json文本,如图:

Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

(3): Json编码 

定义一个简单的数据对象GameItem, 如下

  class GameItem {

    public int a;

    public bool b;

    public float c;

    public string str;

}

创建一个GameItem 对象,并初始化里面的数据,如下:

GameItem item = new GameItem ();

item.a = 10; item.b = false;

item.c = 74.0f; item.str = "hello";

调用JsonMapper的ToJson方法,把对象转成Json String, 如下:

        string jsonStr = JsonMapper.ToJson(item);

        Debug.Log(jsonStr);

运行结果为: {"a":10,"b":false,"c":74,"str":"hello"}, 如下图:

Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

3:LitJson核心源码分析

LitJson使用起来如此简单,那么它是具体怎么实现的呢?接下来我们来分析LitJson源码来学习它代码开发的一些技巧。首先要看下JsonData数据结构,在LitJson内部,每个数据对象都是一个JsonData对象。如图

Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

JsonData里面包含了一个JsonType type的数据成员,用来表示这个JsonData的数据对象是一个什么样的数据类型。JsonType是一个枚举,正好是所有可能的Json的数据类型,如下:


Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

如果这个数据类型是一个Boolean,数据值就存放在inst_boolean变量里面,如果数据类型是一个string, 数据值就存放在inst_string变量里面。

在JSON中,Object与Array是容器,所以在JsonData里面分别用Dictionary<string, JsonData>与List<JsonData>来作为Object与Array的容器,容器中的每个元素又是一个JsonData,所以就实现了容器中可以有容器对象+数据对象。

JsonData中重载了[]操作符,方便容器对象来去数据,如图所示:

Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

Object 容器对象[key]操作重载

Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

数组容器对象的[index]操作重载

JsonData中重载了类型强转操作符,让我们能直接通过强转Json来获取基本的数据:

Int, Float, Double, Boolean, String。如图:


Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

通过强转基本数据到JsonData,来获取JsonData, 如图:

Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言


这样非常方便的让我们生成了JsonData,非常方便的能通过JsonData获取数据。

JsonWrapper来解析Json字符串的时候,就是读取文本内容,来根据对应的Token符号来生成对应的Json对象,具体可以阅读源码: 


Unity JSON编码解码之LitJson 深度剖析,unity教程,unity,json,游戏引擎,算法,开发语言

今天的JSON与LitJson的分析就到这里了文章来源地址https://www.toymoban.com/news/detail-770571.html

到了这里,关于Unity JSON编码解码之LitJson 深度剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 13、ffmpeg使用nvidia显卡对OAK深度相机进行解码和编码

    基本思想:简单使用nvidia的硬件解码进行oak相机的编码和解码学习 一、在本机rtx3060配置好显卡驱动和cuda之后进行下面操作50、ubuntu18.0420.04+CUDA11.1+cudnn11.3+TensorRT7.2/8.6+Deepsteam5.1+vulkan环境搭建和YOLO5部署_ubuntu18.04安装vulkan_sxj731533730的博客-CSDN博客 二、配置环境和编译库

    2024年02月16日
    浏览(39)
  • 机器学习&&深度学习——从编码器-解码器架构到seq2seq(机器翻译)

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——注意力提示、注意力池化(核回归) 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 接下来就要慢慢开始实战了,把这边过了,我们接下来就要进行机器翻译的实战

    2024年02月13日
    浏览(41)
  • Windows平台Unity下播放RTSP或RTMP如何开启硬解码?

    我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。 虽然我们软解码,已经做的资源占有非常低了,但考虑到多路播放的情况,我们也设计了硬解码的接口,下面

    2024年02月10日
    浏览(35)
  • Unity——JSON的读取

    在实际中,读取JSON比保存JSON重要得多。因为存档、发送数据包往往可以采用其他序列化方法,但游戏的配置文件使用JSON格式比较常见。游戏的配置数据不属于动态数据,属于游戏资源,但很适合用JSON表示。 下面以一个简单的JSON数据文件为例,演示读取JSON。从整体上看有两

    2024年02月06日
    浏览(39)
  • Unity解析json文件(分为json与jsonArray)

    什么是json? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度, 那么,JSON到底是什么? JSON就是一串字符串 只不过元素会使用特定的符号标注。 {} 双括号表示对象 [] 中括号表示数组 “” 双引号内是

    2024年02月08日
    浏览(42)
  • Unity之Json读取写入

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于传送数据。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使

    2024年02月05日
    浏览(56)
  • Unity自带方法读写JSON文件

    最近使用JSON文件保存模型表情数据,简单记录一下。 首先自定义数据类,需要记录表情每帧的所有BlendShape及时间戳: 使用Unity自带的JSON读写方法: 保存与读取JSON文件: 简单记录,部分变量与方法未展示,仅供参考。

    2024年02月12日
    浏览(49)
  • 【Unity数据交互】JSON开山篇

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有易于读写和解析的特点,广泛应用于各种应用程序中的数据

    2024年02月06日
    浏览(38)
  • 在unity中添加Newtonsoft.Json

    在Packages-packages-lock.json中修改com.unity.collab-proxy为     \\\"com.unity.collab-proxy\\\": {       \\\"version\\\": \\\"1.5.7\\\",       \\\"depth\\\": 0,       \\\"source\\\": \\\"registry\\\",       \\\"dependencies\\\": {         \\\"com.unity.nuget.newtonsoft-json\\\": \\\"2.0.0\\\"       },       \\\"url\\\": \\\"https://packages.unity.cn\\\"     },   在Packages-manifest.json中修改

    2024年02月13日
    浏览(66)
  • Unity解析JSON的几种方式

    1.使用JsonUtility(Unity自带)解析数据 踩坑 2.使用Newtonsoft.Json dll解析json 链接: link 3.使用LitJson解析数据 4.传递给前端或后端 json

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包