GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

JSON 校验综述

2013 年 4 月 18 日

我们所创建的任何“灵活”或“可扩展的”文件格式,迟早都会因为校验的问题而遭受开发者们的抱怨。在处理校验问题方面有着很多的工具,但是通常可以将它们归为以下几类:

  • 判断数据是否已被正确格式化
  • 手动检查形式有误的数据并尝试纠正
  • 手动检查形式有误的数据并将有误数据丢弃
  • 自动检查形式有误的数据

这篇文章的目的并非为了讨论这些选项,而是对自动校验方面的可用工具包进行了一些总结。

JSON Schema

JSON Schema 是一个建议标准,并且已得到了 17 个不同项目的支持。它可在 JavaScript、Java、Python、 Ruby、Perl、 PHP、.NET、ActionScript、C、 Haskell 和 Erlang 等技术中使用。这种格式比 VeriJSON 更加复杂,模式与实际数据之间的关系几乎很难找到相似之处。然而它的功能也更加广泛,具备支持范围检查的数字、可限制的列表以及在列表中防止重复条目等功能。它同样还支持对其他模式的引用,允许你将大型模式拆分成一个个较小的模式。

Atdgen

Atdgen 对 OCaml 提供了 JSON 的序列化与反序列化支持。JSON 的模式是使用 atd 文件创建的。通过一个代码生成器运行这些文件就可以生成 OCaml 类文件和匹配的对象 /JSON 转换器。在 Atdgen 中,校验是在反序列化过程中进行的。

atd 文件中的校验规则是开放的,开发者可以直接在 atd 文件中注入任意他们想要的 OCaml 代码。它支持对二级模式文件的引用。

Atdgen 基于开源许可可用。

DataContractJsonSerializer

DataContractJsonSerializer 基于 WCF 的 DataContractSerializer,它使用类定义和数据契约属性来确定一个 JSON 文件应该如何进行校验和最终的反序列化。这种方式适合于基本的任务,但是也明显地显现出了性能问题,在字典方面也存在难点。它的校验非常受限于基本结构。

Json.NET

James Newton-King 的 Json.NET 是迄今为止最具综合性的 JSON 序列化和反序列化工具。像 DataContractJsonSerializer 一样,Json.NET 可以使用类来定义它的模式。你可以任意选择使用标准 WCF 数据契约属性或 JSON.NET 的序列化属性,同时它还支持了大量的类型,包括 DataTable 和 nHibernate 实体。而就在这个月, JSON.NET 5.0 (通过 BigInteger)支持了无大小限制的整数以及以 IEnumerable 构造器方式暴露的只读集合(collection)。

JSON.NET 同样支持通过 JSON Schema 进行校验。

VeriJSON

VeriJSON 是一个依赖于基于模式匹配的 Objective-C 库。模式本身以 JSON 的方式编写。支持的类型有“number”、“string”、“bool”和“url”。字符串可以通过一个正则表达式来进行约束,而 url 则可以通过模式进行约束(例如:http,ftp)。以结构化的方式表现数组和对象,并支持可选的属性。

VeriJSON 基于开源许可可用。

英文原文链接 JSON Validation Roundup

2013 年 4 月 18 日 09:113034
用户头像

发布了 52 篇内容, 共 20.2 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营 1 期 -- 第八周作业

曾彪彪

极客大学架构师训练营

嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?

比伯

Java spring 编程 程序员 架构

炸了!一口气间了我18个JVM问题!

云流

Java 面试 jvm调优 JVM垃圾回收原理

Java动态修改LOGGER日志级别

Zhendong

Java Arthas

架构知识学习总结

小黄鱼

极客大学架构师训练营

阿里又出一座丰碑!P9级架构师整合出最新最全微服务1700页手册,下载下来慢慢啃

Java架构追梦

Java 架构 微服务 springboot SpringCloud

开源GitHub标星30K的腾讯Redis笔记,阿里技术专家看到都赞不绝口

小Q

Java 学习 编程 架构 面试

解密猫晚直播技术:如何保障全球200多个国家和地区同时在线狂欢?

阿里云视频云

spring-注入配置

Isuodut

【再见 — JVM】,需要”我”为你做些什么?

李浩宇/Alex

Java JVM Java 25 周年 1 周年盛典 InfoQ 写作平台 1 周年

一次完整的JVM堆外内存泄漏故障排查记录

Zhendong

目标检测-框架之darknet-数据读取

Dreamer

朋友推荐我这份阿里面试通关手册,我却选择了字节的offer

小Q

Java 学习 程序员 架构 面试

不服!阿里P8手写489页SQL优化通关手册,解决你百思不得其解问题

996小迁

sql 程序员 架构 面试 计算机

看完之后,不要再说不懂代理IP了!

前嗅大数据

大数据 静态IP 代理IP 短效代理 动态IP

成长为软件教练的三千大道之一

华为云开发者社区

Java 敏捷开发

如何使用JavaScript实现前端导入和导出excel文件(H5编辑器实战复盘)

徐小夕

Java node.js 前端 React 数据可视化

甲方日常 50

句子

工作 随笔杂谈 日常

双“11”搞促销?用贪心算法来盘他!

王磊

算法

第八周学习性能优化 2 总结

三板斧

极客大学架构师训练营

LeetCode题解:剑指 Offer 22. 链表中倒数第k个节点,递归,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

架構師訓練營第 1 期 - 第 08 周作業

Panda

架構師訓練營第 1 期

七张图了解Kubernetes内部的架构

网管

Kubernetes k8s k8s入门

技术实践丨基于MindSpore的ResNet-50蘑菇“君”的识别应用体验

华为云开发者社区

网络 mindspore 识别推理

天秀!这份由阿里数位大牛编写的777页高可用架构+MySQL

Java~~~

Java MySQL 编程语言 高并发 架构师

python+flask编写一个简单的登录接口例子

测试人生路

Python 接口测试

【DevOps实践】企业应用场景众多,怎样选择合适的代码分支模型?

嘉为蓝鲸

git DevOps 软件开发 持续交付 代码管理

Reactor详解之:异常处理

程序那些事

响应式 reactor 程序那些事 响应式系统 响应式架构

架构师训练营 1 期 - 第八周 - 性能优化 2

三板斧

极客大学架构师训练营

关于静态分析技术符号执行,从一个故事讲起······

华为云开发者社区

代码 分析 静态

前端如何一键生成多维度数据可视化分析报表

徐小夕

Java node.js 前端 React 数据可视化

JSON校验综述-InfoQ