首页 > 编程知识 正文

jsonArray(json详解)

时间:2023-05-04 04:32:05 阅读:96603 作者:607

大家好,我不是鱼皮。

好在我是程序员,他也是程序员。

周末,我在开发网站,他在开发游戏。两个人一起写代码,一起写bug,却也有了不一样的浪漫,好难受!

结对编程

今天他在后台遇到Bug,游戏无论如何都无法启动。来看看吧,和大家分享一些编程小技巧~

00-1010开始游戏时,首先要加载一些配置,比如玩家的用户名、关卡的难度、玩家的初始道具等。

因为游戏是用Java语言开发的,所以他把这些配置封装成一个对象,代码如下:

//游戏配置

类GameConfig {

//玩家姓名

字符串名称;

//游戏难度

内部难度;

//播放器项目

String[]项;

}

为了开发调试方便,他写了一个默认配置;并且为了方便管理默认配置,它被单独存储在一个JSON文件中,而不是死写在代码中。

默认的JSON配置文件如下:

{

姓名' : 'yupi ',

难度' : 5,

项目' : ['一级标题','二级a']

}

然后在程序中读取配置文件中的JSON字符串,再通过Gson解析库将JSON字符串转换成Java对象,这样就可以获取游戏配置信息,并进行进一步的处理。

逻辑代码如下:

//加载游戏配置

void LoadConfig(){ 0

string jsonStr=LoadFile(' config . JSON ');

GameConfig config=new Gson()。fromJson(jsonStr,gamecoconfig . class);

//获取玩家名称

string name=config . getname();

//更多处理

.

}

整个过程看起来很简单。为什么是错的?

打印出异常信息。显然,是JSON解析错误:

仔细看,嘿,太傻了。配置文件输入错误,行尾缺少必要的引号。当然,解析失败了!

{

//行尾缺少引号。

项目' : ['一级主管','二级a ']

}

他说他很无助,没有选择。开发的时候配置越堆越多,改了又改,不注意的时候少打一个字符。

我笑了:JSON格式真的很灵活很强大,我们在工作中经常会写一些复杂的嵌套JSON。我确实知道一种帮助降低JSON文件出错概率的方法。

他不同意:哦,什么办法?找编辑查还是查网站?

我:那你只能查基础语法了。来,我给你一个更好的神器—— JSON Schema!

Bug 起因

-align: left;">JSON 格式的优点之一就是轻量,其本身并不支持写注释,所以没办法直接在文件本身中对字段进行描述。

因此,假如我们用 JSON 来做配置文件,大多数情况下都要对着文档来查看每个字段的类型、限制范围,才能编写出正确的配置。这样做不仅效率低,而且必须要自己来校验编写出的配置是否正确,一不小心就写错了。

而 JSON Schema 就是为解决此问题而生的,他本身就是 JSON 文件,用来注解和校验 JSON 文件。

举个例子,上面的游戏配置中,因为不小心输错了字符串数组导致程序出了 Bug。那可以编写一个 JSON Schema 来校验 items 字段是否为合法数组,代码如下:

{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://www.code-nav.cn/latest.json", "title": "GameConfig", "description": "游戏配置", "type": "object", "properties": { "items": { "type": "array" } } }

在这个文件中,指定了 GameConfig 的类型必须为 object(对象),且 items 属性类型必须为 array(数组)。

接下来在要校验的数据中指定 "$schema" 字段为该校验文件地址,比如下列 JSON 配置,故意把 items 字段的值设置为 string(字符串)而非数组:

{ "$schema": "https://www.code-nav.cn/latest.json", { "name": "yupi", "difficulty": 5, "items": "haha" } }

这样就能检查数据是否合法啦!很多主流的编辑器(比如 JetBrains 全家桶)可以自动识别校验文件,并且检查你的 JSON 输入是否合法。也可以使用 JSON Schema validation online 等在线校验 JSON Schema 的网页来查看效果:

在线校验

JSON Schema 功能非常强大,除了对字段类型的校验外,还支持判断字段是否必填、是否为某个值(支持正则表达式)、最大值最小值、字段个数、枚举等,甚至支持组合多个判断条件!

比如还可以给我们的游戏配置的难度字段添加校验,必须是 1 到 5 之间的数字,语法如下:

"difficulty": { "type": "number", "minimum": 1, "maximum": 5 }

优点

了解什么是 JSON Schema 后,总结下它的优点:

对数据格式进行描述,提高可读性,帮助人类理解让机器更理解数据,从而提供数据校验和提示输入等功能提供了统一的数据规范语法,便于实现接口格式校验、自动化测试,甚至还能利用它自动生成代码!比如 jsonschema2pojo 工具,根据 JSON 生成 Java 类。

自动生成代码

总之,利用好 JSON Schema,能大大减少开发者们沟通的成本、保证代码的质量就对了。毕竟 JSON 可是当今前后端开发中最流行的数据交换格式啊!


看着他一脸懵逼的样子,我不禁笑到:这个鱼皮就是逊啦!

求求给这么逊的鱼皮 点赞 支持一下吧 ❤️

最后再送大家一些 编程学习资料:

指路:https://t.1yb.co/qOJG

欢迎阅读 我的编程学习和大厂求职经历,不再迷茫!

指路:https://t.1yb.co/w66s

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。