1.spark sql源码系列 | json_tuple一定比 get_json_object更高效吗?
2.JSONObject转换为对象时,源码转换后的源码对象为空
3.Unity JSON编码解码之LitJson 深度剖析
4.IntelliJ IDEA 常用插件一览,让效率成为习惯
spark sql源码系列 | json_tuple一定比 get_json_object更高效吗?
对比json_tuple和get_json_object,源码网上普遍认为json_tuple效率更高。源码理由是源码json_tuple仅需解析一次json数据,而get_json_object需多次解析。源码华云源码实际操作中,源码get_json_object在解析json字符串到jsonObject阶段仅执行一次,源码而非多次解析。源码从执行计划角度看,源码get_json_object更为简洁,源码而json_tuple涉及udtf函数,源码其执行计划更为繁重。源码功能多样性上,源码get_json_object支持更丰富的源码路径处理,如正则匹配、嵌套、it源码管理多层取值等,而json_tuple仅能解析第一层key。在实际使用时,无需盲从效率结论,根据具体需求选择。确保json数据不过长过大,无论使用哪种方法,效率都不会理想。正确理解并合理运用这些函数,对于优化查询性能至关重要。
JSONObject转换为对象时,转换后的对象为空
在进行 JSONObject 转换为对象操作时,若发现转换后的对象为空,意味着可能存在代码逻辑问题或是相关转换函数实现的缺失。首先检查代码实现,确认逻辑正确性。移动客服源码
执行结果显示对象为空的结果。通过调试,发现问题根源在于底层使用了 PropertyDescriptor 反射来获取属性,通过 PropertyDescriptor.getWriteMethod() 方法来获取属性的 setter 方法。问题在于此方法返回值必须为 void,否则将会返回 null,造成后续赋值操作无法执行。
通过分析 getWriteMethod() 源代码,得出 setter 方法的返回值类型必须满足特定要求。通常,setter 方法的目标是修改对象属性,不应带有返回值。然而,在使用了 @Accessors(chain = true) 标注的 lombok 注解后,生成的 setter 方法实现了链式调用功能,其返回值为对象本身而非 void,布林 源码这正是导致 PropertyDescriptor 无法识别的关键原因。
要解决此问题,建议在使用 @Builder 时确保同时引入 @NoArgsConstructor 和 @AllArgsConstructor。当遇到 @Builder 注解时,确保代码中包含无参构造方法(@NoArgsConstructor)和全参构造方法(@AllArgsConstructor),以避免因构造方法缺失或错误而导致的异常。这样的配置可确保对象能够根据 Builder 的需求正确地初始化属性,从而解决转换过程中对象为空的问题。
Unity JSON编码解码之LitJson 深度剖析
JSON在游戏开发中是一种序列化/反序列化常用的技术,把游戏相关的数据,如地图组成,通过JSON编码,序列化成JSON文本,传输或存储,要使用的时候再通过JSON技术把文本解析成数据对象,在代码中使用。scratch的源码本文将从以下几个方面详细的深度剖析JSON与LitJson库的编码解码:
对,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀
(1)什么是JSON;
(2)Unity如何使用LitJson;
(3)LitJson核心源码分析;
1: 什么是JSON
JSON(JavaScriptObject Notation, JS对象简谱)是一种轻量级的数据交换格式。它是基于ECMAScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 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;
2: Unity中如何使用LitJson
Unity项目中使用LitJson,操作起来也十分简单。接下来我们详细的操作一下,具体步骤如下:
(1): 创建一个标准的Unity项目,下载LitJson的代码库,我一般会新建一个3rd文件夹,把LitJson的代码库放入到项目中,如图所示:
(2): 编写一个测试节点,挂一个测试代码,用来测试与讲解LitJson库的使用,同时编写一个JsonText.txt的文本资源,作为测试的Json文本,如图:
(3): Json编码
定义一个简单的数据对象GameItem, 如下
运行结果为:{ "a":,"b":false,"c":,"str":"hello"}, 如下图:
(4) Json解码
从JsonText.txt文件里面加载TextAsset资源,或去资源中的文本对象,得到JsonStr, 调用JsonWrapper对象的ToObject方法得到JsonData的数据对象。
JsonDatajsonObject=JsonMapper.ToObject(jsonTxt.text);
解析出来jsonObject后,可以根据json中的对象类型来直接访问即可。
JsonData rst = jsonObject["rst"]; // 子Object对象
JsonData partnerList = rst["partnerCodeList"]; // 数组对象
JsonData partner0 = partnerList[0]; // 用数组方式访问
JsonData可以强转成任意的基本数据类型,string, float, double, boolean, int等。
3:LitJson核心源码分析
LitJson使用起来如此简单,那么它是具体怎么实现的呢?接下来我们来分析LitJson源码来学习它代码开发的一些技巧。首先要看下JsonData数据结构,在LitJson内部,每个数据对象都是一个JsonData对象。如图
JsonData里面包含了一个JsonType type的数据成员,用来表示这个JsonData的数据对象是一个什么样的数据类型。JsonType是一个枚举,正好是所有可能的Json的数据类型,如下:
如果这个数据类型是一个Boolean,数据值就存放在inst_boolean变量里面,如果数据类型是一个string, 数据值就存放在inst_string变量里面。
在JSON中,Object与Array是容器,所以在JsonData里面分别用Dictionary与List来作为Object与Array的容器,容器中的每个元素又是一个JsonData,所以就实现了容器中可以有容器对象+数据对象。
JsonData中重载了[]操作符,方便容器对象来取数据,如图所示:
Object 容器对象[key]操作重载
数组容器对象的[index]操作重载
JsonData中重载了类型强转操作符,让我们能直接通过强转Json来获取基本的数据:
Int, Float, Double, Boolean, String。如图:
通过强转基本数据到JsonData,来获取JsonData, 如图:
这样非常方便的让我们生成了JsonData,非常方便的能通过JsonData获取数据。
JsonWrapper来解析Json字符串的时候,就是读取文本内容,来根据对应的Token符号来生成对应的Json对象,具体可以阅读源码:
今天的JSON与LitJson的分析就到这里了。
IntelliJ IDEA 常用插件一览,让效率成为习惯
一、官方工具
IntelliJ IDEA 默认安装的工具包括 Git Integration、Maven Integration、Markdown support、SSH Remote Run 等。其中,Editor REST Client 是一个功能强大的 HTTP Client 插件,从 IDEA .3 版本开始支持,在 .1 版本中添加了更多特性。内置 UML Support 插件可帮助研究源码,清晰查看类继承关系。
二、市场插件
阿里巴巴 Java 开发手册插件实现了《阿里巴巴 Java 开发手册》中的 条规则,基于 PMD 实现,部分规则具备 Quick Fix 功能。Key Promoter X 是一个快捷键提示插件,帮助用户发现可替代鼠标操作的快捷键。Lombok 插件简化代码注解过程,CodeMaker 插件用于自定义代码模板生成代码。JUnitGenerator 插件自动创建单元测试,支持自定义代码生成。
Free Mybatis plugin 方便进行 Mapper 接口和 XML 文件之间的跳转。Maven Helper 插件辅助解决 Maven 引入 jar 包冲突问题。GsonFormat 插件根据 JSONObject 转换实体类参数,POJO to JSON 插件将简单 Java 领域对象转成 JSON 字符串。SequenceDiagram 插件用于反向生成 UML 的时序图。String Manipulation 插件提供丰富字符串工具,Rainbow Brackets 插件实现配对括号颜色高亮。
RestfulToolkit 插件提供 RESTful 服务开发辅助工具集,包括直接跳转到对应方法定义、显示 Services tree 窗口、简单 HTTP 请求工具等。Grep Console 插件实现日志不同级别颜色区分、高亮显示和便捷检索功能。GenerateAllSetter 插件一键生成对象的所有 set 语句。Iedis 插件实现 Redis 可视化操作,支持增删查改及命令行操作。Kubernetes 插件支持编辑 Kubernetes 资源文件,方便查看默认值及链接到具体位置。
Translation 插件实现一键替换半中文编程到英文,提高编程效率和准确性。以上插件结合使用,可显著提高开发效率,让效率成为习惯。