首页 > 其他分享 >使用 JsonSchema 校验 JSON数据

使用 JsonSchema 校验 JSON数据

时间:2024-08-22 09:39:20浏览次数:11  
标签:jsonSchema type 校验 JSON JsonSchema import com schema

有时候JSON 数据格式需要校验是否合法,我们可以使用 JsonSchema 来校验数据是否合法。

引入 pom.xml

https://json-schema.org/

<dependency>
            <groupId>com.networknt</groupId>
            <artifactId>json-schema-validator</artifactId>
            <version>1.4.0</version>
        </dependency>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.networknt.schema.JsonSchema;
import com.networknt.schema.JsonSchemaFactory;
import com.networknt.schema.SpecVersion;
import com.networknt.schema.ValidationMessage;

import java.util.Set;

public class ValidJson {

    public static void main(String[] args) throws JsonProcessingException {
        String json="{\n" +
                " \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n" +
                "    \"title\": \"Order Event\",\n" +
                "    \"description\": \"Order event schema for example\",\n" +
                "    \"required\": [\"order_id\", \"total_price\", \"products\" ],\n" +
                "    \"properties\": {\n" +
                "       \"order_id\": {\n" +
                "          \"type\": \"string\"\n" +
                "        },\n" +
                "        \"event\": {\n" +
                "          \"enum\": [\"PLACED\", \"DELIVERED\", \"RETURNED\"],\n" +
                "          \"type\": \"string\"\n" +
                "        },\n" +
                "        \"total_price\": { \n" +
                "         \"type\": \"number\",\n" +
                "             \"minimum\": 0\n" +
                "     },\n" +
                "        \"products\": {\n" +
                "      \"type\": \"array\",\n" +
                "      \"items\": {\n" +
                "        \"additionalProperties\": true,\n" +
                "        \"required\": [\"product_id\", \"price\"],\n" +
                "        \"minItems\": 1,\n" +
                "        \"properties\": {\n" +
                "          \"product_id\": {\n" +
                "            \"type\": \"string\"\n" +
                "          },\n" +
                "          \"price\": {\n" +
                "            \"type\": \"number\",\n" +
                "            \"minimum\": 0\n" +
                "          },\n" +
                "          \"quantity\": {\n" +
                "            \"type\": \"integer\"\n" +
                "          }\n" +
                "        }\n" +
                "      }\n" +
                "    }\n" +
                "   }\n" +
                "}";

        String json2="{\n" +
                "  \"order_id\":\"order134\",\n" +
                "   \"event\": \"PLACED\",\n" +
                "   \"products\": [\n" +
                "     {\n" +
                "       \"product_id\": \"product_1\",\n" +
                "        \"price\":20.5,\n" +
                "       \"quantity\":2\n" +
                "     }\n" +
                "   ],\n" +
                "   \"total_price\": 41\n" +
                "}";

        JsonSchema jsonSchema = jsonSchema(json);

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(json2);



        String str= validateJson(jsonSchema,jsonNode);

        System.err.println(str);

    }

    public static JsonSchema jsonSchema(String schema) {
        return JsonSchemaFactory
                .getInstance( SpecVersion.VersionFlag.V7 )
                .getSchema(schema);
    }

    public static String validateJson(JsonSchema jsonSchema, JsonNode jsonNode){
        Set<ValidationMessage> errors = jsonSchema.validate(jsonNode);
        return errors.toString();
    }
}

标签:jsonSchema,type,校验,JSON,JsonSchema,import,com,schema
From: https://www.cnblogs.com/yg_zhang/p/18373065

相关文章

  • 怎么对前端的一些按钮做一个权限校验
    在一般情况下,我们需要对一些按钮做一个权限校验,来保证只有有权限的用户才能看到1.创建一个js文件,来写我们的全局方法我的方法是这样的importVuefrom'vue';Vue.mixin({methods:{hasAuth(perm){varauthority=this.$store.state.menu.......
  • 跨域、JSONP、CORS、Spring、Spring Security解决方案
    概述JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。跨域是浏览器(如Chrome浏览器基于JSV8引擎,可以简单理解为JS解释器)的一种同源安全策略,是浏览器单方面限制脚本的跨域访问。因此,仅有客户端运行在浏览器时才存在跨域问题,才需要考虑如何解决这个问题。浏览器控制台......
  • 使用jakarta.validation自定义校验规则
    jakarta.validation是一套数据校验的规范,内置了NotBlank,NotNull,Min,Pattern等校验注解外,还提供了自定义注解进行任意校验规则的扩展。依赖包为:<dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</a......
  • mormot2 json操作
    mormot2json操作procedureTcrud.select;vardb:Tdb;pool:Tdbpool;jo:Tdocvariantdata;i:integer;beginjo.init;trytrypool:=GetDBPool(DBID);db:=pool.Lock;fori:=0tohigh(sqls)dobeginDB.sele......
  • go的github.com/prometheus如何在单测中校验值是否正确
    假如我的指标定义如下:MetricGroupStatGauge=prometheus.NewGaugeVec(prometheus.GaugeOpts{ Name:"test", Help:"test",},[]string{"name","age","sex"})...忽略对指标添加数据的代码那么如何取值进行校验呢?注意:GetMetricWithLabelValues(&......
  • 校验和
    1.对应数据位累加和:需确认协议规定是从哪一位累加到哪一位,以及对应到代码中rd_cnt[7:0]是从第几位累加到第几位。//校验和reg[15:0]rcvCLJ_SUM;always@(posedgeSYS_CLKornegedgesys_rst_n)beginif(!sys_rst_n)rcvCLJ_SUM<=16'd0;elseif(rd_......
  • TopoJSON格式详解,写入读取TopoJSON示例
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......
  • TypeScript学习之旅--编译选项-tsconfig.json
    上一篇文章提到了tsconfig.json文件中的简单配置项,如include、extends、exclude,本篇文章我们了解一下编译器选择compilerOptions1、target  用来指定ts被编译为js的ES版本有固定值,例如:‘es3’ 'es5' 'es6''es2015' 'es2018'等“target”:"es2915"2、moud......
  • csharpierrc.json 配置
    CSharpier配置.csharpierrc.json{"printWidth":100,"useTabs":false,"tabWidth":4,"endOfLine":"auto"}参数说明PrintWidth​Specifyatwhatpointtheprinterwillwrapcontent.Thisisnotahardlimit.......
  • Visual Studio 2013 jsoncpp 0.10.7库编译
    前言全局说明VisualStudio2013jsoncpp编译jsoncpp介绍说明:https://www.cnblogs.com/wutou/p/18367551一、说明环境:Windows7旗舰版VisualStudio2013二、选择根据vs2013工具环境和jsoncpp介绍,这里选用0.10.7版本演示三、准备3.1解压文件进入m......