分享基于 JSON DSL 实现数据验证框架

简介

在现代应用程序开发中,数据验证是确保数据质量和一致性的重要环节。基于 JSON DSL(领域特定语言)实现的数据验证中间件为开发者提供了一套强大的工具集,旨在简化数据结构的定义和验证过程。此框架不仅支持任意 JSON 格式的自动代码生成,还能够基于 DSL 定义的 schema 来实现数据验证及数据提取。

GitHub - kevinLuan/json-schema-validator: Implement the data structure validation framework based on JSON DSL / 基于JSON DSL实现数据结构验证框架

特点

1. 灵活的 DSL 定义

该中间件允许用户通过简单的 DSL 语法来描述复杂的 JSON 结构。开发者可以轻松定义数据模型,确保数据符合预期格式。例如,用户可以使用直观的语法来定义 JSON 对象、数组、数字和字符串等数据类型。

2. 自动代码生成

通过从 JSON schema 自动生成 Java 类,开发者可以减少手动编码的工作量。这一特性不仅提高了开发效率,还降低了因手动编码而导致的错误风险。只需提供 JSON 数据,该中间件便能生成相应的 Java 代码,帮助开发者快速启动项目。

3. 数据验证

中间件内置了丰富的验证规则,确保数据符合预期格式。开发者可以轻松地对输入数据进行验证,确保其符合定义的 JSON schema。这一功能对于数据的完整性和准确性至关重要。

4. 数据提取

支持从 JSON 文档中提取指定字段,简化数据处理流程。开发者可以快速获取所需数据,避免了繁琐的手动解析过程,从而提高了数据处理的效率。

快速开始

添加依赖

XML 复制代码
<dependency>
    <groupId>cn.taskflow.jsv</groupId>
    <artifactId>json-schema-validator</artifactId>
    <version>0.1.5</version>
</dependency>

代码生成

假设我们有以下 JSON 数据:

{

"item": {

"id": 1000,

"orderIds": 1, 2, 3, 4, 5,

"title": "item name"

},

"name": "张三丰",

"age": 60

}

代码生成

java 复制代码
String json = "..."; // JSON 数据
// 使用 json 生成 JSON schema 代码
String javaCode = CodeGenerationUtils.generateSchemaCode(json, new GenerateOptional());
System.out.println(javaCode);

生成后的代码如下:

java 复制代码
JsonSchema jsonSchema = JsonObject.required(
    JsonObject.required("item",
        JsonNumber.required("id"),
        JsonArray.required("orderIds"),
        JsonString.required("title")
    ),
    JsonString.required("name"),
    JsonNumber.required("age")
);

数据验证

使用生成的 JSON schema 进行数据验证非常简单:

java 复制代码
Validator.fromSchema(jsonSchema).validate(json);

基于 Spring 请求 Body 参数验证示例

演示创建订单接口

在电商系统中,创建订单的请求数据结构如下:

{

"orderId": "ORD123456",

"user": {

"userId": "USR78910",

"name": "张三",

"email": "zhangsan@example.com",

"phone": "13800000000"

},

"items": [

{

"productId": "PROD001",

"productName": "无线耳机",

"quantity": 2,

"price": 199.99,

"total": 399.98

},

{

"productId": "PROD002",

"productName": "蓝牙音箱",

"quantity": 1,

"price": 299.99,

"total": 299.99

}

],

"totalAmount": 699.97,

"orderDate": "2024-02-04T14:30:00Z",

"status": "PENDING",

"shippingAddress": {

"recipient": "李四",

"addressLine1": "北京市朝阳区某街道",

"addressLine2": "小区1号楼",

"city": "北京",

"state": "北京市",

"postalCode": "100000",

"country": "中国"

},

"payment": {

"method": "CREDIT_CARD",

"transactionId": "TXN123456789",

"amount": 699.97,

"currency": "CNY"

}

}

使用 JSON 生成 Schema 代码

可以使用以下代码生成 Schema:

java 复制代码
CodeGenerationUtils.generateSchemaCode(json, new GenerateOptional());

将生成的 Schema 定义注册到 Spring

在 Spring 中注册生成的 Schema 定义:

java 复制代码
@Bean("orderSchema")
public JsonSchema orderSchema() {
    return JsonObject.required(
        JsonString.required("orderId"),
        JsonObject.required("user",
            JsonString.required("userId"),
            JsonString.required("name"),
            JsonString.required("email"),
            JsonString.required("phone")),
        JsonArray.required("items",
            JsonObject.required(
                JsonString.required("productId"),
                JsonString.required("productName"),
                JsonNumber.required("quantity"),
                JsonNumber.required("price"),
                JsonNumber.required("total"))),
        JsonNumber.required("totalAmount"),
        JsonString.required("orderDate"),
        JsonString.required("status"),
        JsonObject.required("shippingAddress",
            JsonString.required("recipient"),
            JsonString.required("addressLine1"),
            JsonString.required("addressLine2"),
            JsonString.required("city"),
            JsonString.required("state"),
            JsonString.required("postalCode"),
            JsonString.required("country")),
        JsonObject.required("payment",
            JsonString.required("method"),
            JsonString.required("transactionId"),
            JsonNumber.required("amount"),
            JsonString.required("currency")));
}

对 Spring Controller 请求 Body 参数进行验证示例

在 Spring Controller 中进行请求参数验证:

java 复制代码
@PostMapping("/api/test")
public ApiResponse<T> createOrder(@RequestBody @JsonSchemaValidate("orderSchema") Order order) {
    // 省略代码...
}

结论

基于 JSON DSL 的数据验证中间件为开发者提供了一个灵活、高效的工具集,能够简化数据结构的定义和验证过程。通过自动代码生成、丰富的验证规则和数据提取功能,开发者可以更专注于业务逻辑的实现,提高开发效率。无论是简单的验证需求还是复杂的数据处理场景,该中间件都能为开发者提供强有力的支持。

开源项目地址:

GitHub - kevinLuan/json-schema-validator: Implement the data structure validation framework based on JSON DSL / 基于JSON DSL实现数据结构验证框架

相关推荐
?? Daisy5 小时前
Claude Code 接入 GPT:settings.json 两种配置方法(2026-10)
gpt·json
小静AI工程实验室8 小时前
Python 爬虫解析 JSON-LD:多块 script、@graph 与坏数据的 9 个边界
爬虫·python·json
goehou1 天前
LLM 结构化输出全解:从 Prompt 约束到 Schema 硬保证,三层实现怎么选
ai·llm·json·agent·教程·结构化输出
独立开发者阿乐1 天前
结构化数据 JSON-LD 实战:让 AI 读懂你的网页
人工智能·json·结构化数据·geo优化·json-ld·ai收录·faqpage
liangshanbo12153 天前
高级前端面试题:package.json 常见字段
前端·json
梦帮科技3 天前
【3.0修订版】创世与节点工程:genesis.json 与 node.toml 解剖
数据结构·算法·json·去中心化·区块链·智能合约·信任链
weixin_440730504 天前
内置函数、json文本、pickle二进制
开发语言·python·json
念越4 天前
接口自动化测试从入门到实战:接口用例设计、Requests、Pytest、YAML、JSON Schema 与 Allure 报告
python·测试工具·自动化·json·pytest
福兮说5 天前
前后端算的 MD5、SHA-256 对不上?编码、换行、BOM、HMAC、JSON 顺序,八个原因逐个实测
前端·javascript·node.js·json·哈希算法
网络毒刘6 天前
MCP 从 0 接入 Cursor:mcp.json 安装配置到最小调用与常见报错
json