Java中Json模式和验证库
我可以看到有一些库生成Json模式,还有一些库可以验证。请您推荐一些示例库和活动库,它们可以在Java中同时提供这两种功能。我正在寻找Apache许可库 我试过杰克逊和格森。 Gson不支持json模式创建和验证。 Jackson支持json模式生成,但不完全支持,例如,它不支持json模式中的默认值Java中Json模式和验证库,java,json,jsonschema,json-schema-validator,Java,Json,Jsonschema,Json Schema Validator,我可以看到有一些库生成Json模式,还有一些库可以验证。请您推荐一些示例库和活动库,它们可以在Java中同时提供这两种功能。我正在寻找Apache许可库 我试过杰克逊和格森。 Gson不支持json模式创建和验证。 Jackson支持json模式生成,但不完全支持,例如,它不支持json模式中的默认值 关于,我更喜欢使用GSON或Jackson: - 您可以使用Justify或json模式验证器,请参见以下链接: - - 我希望以上链接能为您提供足够的信息我更喜欢使用GSON或Jackson:
关于,我更喜欢使用GSON或Jackson: - 您可以使用Justify或json模式验证器,请参见以下链接: - -
我希望以上链接能为您提供足够的信息我更喜欢使用GSON或Jackson: - 您可以使用Justify或json模式验证器,请参见以下链接: - -
我希望上面的链接能为您提供足够的信息GSON和Jackson的主要作用是处理与JSON之间的数据序列化/反序列化。 JSON模式的生成和验证都不是他们主要关心的问题 根据您对另一个问题的评论,对于模式生成,有两种备选方案——它们的验证也是如此 生成和验证的实现列表 根据R.Groote的回答,您可以在生成库和验证库上找到一些但不是全部 验证 就我个人而言,我只是使用到目前为止,并发现它非常直观和易于使用。它使用Jackson-under-the-hood,这在我的用例中很实用,因为我已经在使用同一个库来从/到JSON反序列化数据,因此减少了额外的依赖性 一代 免责声明:这是有偏见的部分,因为我是 JSON模式生成库的一个示例是。这也在内部使用了Jackson,因此同样与 jsonschema生成器库不会立即填充默认值,但您可以根据Jackson@JsonProperty注释轻松地进行如下配置,如您的其他问题所示: SchemaGeneratorConfigBuilder configBuilder=new SchemaGeneratorConfigBuilderSchemaVersion.DRAFT_2019_09,OptionPreset.PLAIN_JSON; configBuilder.forFields.withDefaultResolverfield->{ JsonProperty annotation=field.getAnnotationConsideringFieldAndGetterJsonProperty.class; return annotation==null | | annotation.defaultValue.isEmpty?null:annotation.defaultValue; }; SchemaGenerator generator=新建SchemaGenerator ConfigBuilder.build; JsonNode jsonSchema=generator.generateSchemaYourClass.class; System.out.printlnjsonSchema.toString; 如果您需要数字默认值,那么可能需要对@JsonProperty.defaultValue字符串进行一些条件解析
另外,如果您希望更具体地处理杰克逊注释,那么您也可以考虑添加可选的VICToS/JSONSORM模块杰克逊。 编辑作为对您的问题的响应,您必须在代码和注释中定义两次默认值: 使用victools/jsonschema生成器,您可以完全控制默认值的来源。一种可能的方法是从遇到的各个对象的实际实例中查找默认值——这里通过您自己的包过滤以跳过外部类型。 以下只是一个可能的粗略示例:
ConcurrentMapGSON和Jackson的主要作用是处理JSON中数据的序列化/反序列化。 JSON模式的生成和验证都不是他们主要关心的问题 根据您对另一个问题的评论,对于模式生成,有两种备选方案——它们的验证也是如此 生成和验证的实现列表 根据R.Groote的回答,您可以在生成库和验证库上找到一些但不是全部 验证 就我个人而言,我只是使用到目前为止,并发现它非常直观和易于使用。它使用Jackson-under-the-hood,这在我的用例中很实用,因为我已经在使用同一个库来从/到JSON反序列化数据,因此减少了额外的依赖性 一代 免责声明:这是有偏见的部分,因为我是 JSON模式生成库的一个示例是。这也在内部使用了Jackson,因此同样与 jsonschema生成器库不会立即填充默认值,但您可以根据Jackson@JsonProperty注释轻松地进行如下配置,如您的其他问题所示: SchemaGeneratorConfigBuilder configBuilder=new SchemaGeneratorConfigBuilderSchemaVersion.DRAFT_2019_09,OptionPreset.PLAIN_JSON; configBuilder.forFields.withDefaultResolverfield->{ JsonProperty annotation=field.getAnnotationConsideringFieldAn dGetterJsonProperty.class; return annotation==null | | annotation.defaultValue.isEmpty?null:annotation.defaultValue; }; SchemaGenerator generator=新建SchemaGenerator ConfigBuilder.build; JsonNode jsonSchema=generator.generateSchemaYourClass.class; System.out.printlnjsonSchema.toString; 如果您需要数字默认值,那么可能需要对@JsonProperty.defaultValue字符串进行一些条件解析
另外,如果您希望更具体地处理杰克逊注释,那么您也可以考虑添加可选的VICToS/JSONSORM模块杰克逊。 编辑作为对您的问题的响应,您必须在代码和注释中定义两次默认值: 使用victools/jsonschema生成器,您可以完全控制默认值的来源。一种可能的方法是从遇到的各个对象的实际实例中查找默认值——这里通过您自己的包过滤以跳过外部类型。 以下只是一个可能的粗略示例:
谢谢。请你也回答这个问题好吗?我看到了这个问题,但不能回答。我从未使用过mbknor库,但在调查现有生成器库时发现它不适合我的特定用例,并最终编写了自己的生成器库。我认为默认值还有一个问题。如果我使用注释JsonPropertydefaultValue=abc。在生成模式时会考虑此注释,但在通过Jackson将json反序列化为POJO时不会考虑此注释。这意味着我必须在两个位置为每个属性指定默认值注释和赋值可能是的。根据注释的JavaDoc,注释的默认值用于文档目的。看来你是对的。如果遵循代码中的某些约定,还可以从代码中查找默认值。例如,如果对于所有具有默认值的字段,始终存在一个无参数构造函数和getter,则您可以始终创建一个新的对象实例,并通过getter检索默认值。是的,但我仍必须在多个位置指定默认值。我不确定是否可以重写或扩展Jackson反序列化过程,并检查@JsonProperty是否与默认值的属性关联。谢谢。请你也回答这个问题好吗?我看到了这个问题,但不能回答。我从未使用过mbknor库,但在调查现有生成器库时发现它不适合我的特定用例,并最终编写了自己的生成器库。我认为默认值还有一个问题。如果我使用注释JsonPropertydefaultValue=abc。在生成模式时会考虑此注释,但在通过Jackson将json反序列化为POJO时不会考虑此注释。这意味着我必须在两个位置为每个属性指定默认值注释和赋值可能是的。根据注释的JavaDoc,注释的默认值用于文档目的。看来你是对的。如果遵循代码中的某些约定,还可以从代码中查找默认值。例如,如果对于所有具有默认值的字段,始终存在一个无参数构造函数和getter,则您可以始终创建一个新的对象实例,并通过getter检索默认值。是的,但我仍必须在多个位置指定默认值。我不确定是否可以重写或扩展Jackson反序列化过程,并检查@JsonProperty是否与具有默认值的属性关联。