JSON 模式(Schema)

来源:互联网 发布:淘宝花钱推广有用吗 编辑:程序博客网 时间:2024/04/29 18:59

JSON 模式是一种基于 JSON 格式定义 JSON 数据结构的规范。
现在,RESTful接口和JSON大行其道,我们可以把JSON直接存储到数据库中,提供了比原先的关系表更容易扩展的能力(虽然JSON串的存储仍然用到了关系表)。RESTful接口直接返回JSON数据,比返回xml更加简洁和易读。xml中可以有xml schema对xml数据进行定义和校验,同样的,JSON中也有相应的叫做JSON schema的机制,来对JSON数据进行描述和定义,并且提供了相应的机制来检验某个JSON字符串是否符合JSON schema的定义。

我们来看一下可以用于这一模式中的各种重要关键字:

关键字 描述 $schema $schema 关键字状态,表示这个模式与v4规范草案书写一致。 title 用它给我们的模式提供了标题。 description 关于模式的描述。 type type 关键字在我们的JSON数据上定义了第一个约束:必须是一个JSON对象。 properties 定义各种键和他们的值类型,以及用于JSON文件中的最小值和最大值。 required 存放必要属性列表。 minimum 给值设置的约束条件,表示可以接受的最小值。 exclusiveMinimum 如果存在”exclusiveMinimum”并且具有布尔值true,如果它严格意义上大于”minimum”的值则实例有效。 maximum 给值设置的约束条件,表示可以接受的最大值。 exclusiveMaximum 如果存在”exclusiveMinimum”并且具有布尔值true,如果它严格意义上小于”maximum” 的值则实例有效。 multipleOf 如果通过这个关键字的值分割实例的结果是一个数字则表示紧靠”multipleOf”的数字实例是有效的。 maxLength 字符串实例字符的最大长度数值。 minLength 字符串实例字符的最小长度数值。 pattern 如果正则表达式匹配实例成功则字符串实例被认为是有效的。

测试json

[    {        "id": 2,        "name": "An ice sculpture",        "price": 12.50    },    {        "id": 3,        "name": "A blue mouse",        "price": 25.50    }]

json模式示例

{    "$schema": "http://json-schema.org/draft-04/schema#",    "title": "Product",    "type": "array",    "items": {        "type": "object",        "properties": {            "id": {                "description": "The unique identifier for a product",                "type": "integer"            },            "name": {                "description": "Name of the product",                "type": "string"            },            "price": {                "type": "number",                "minimum": 0,                "exclusiveMinimum": true            }        },        "required": ["id", "name", "price"]    }}

要检验一个给定的JSON字符串是否符合一个给定的JSON schema,在java中我们可以使用 json-schame-validator https://github.com/fge/json-schema-validator

下边是JSON schema 校验的相关代码:

import java.io.IOException;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.fasterxml.jackson.databind.JsonNode;import com.github.fge.jackson.JsonLoader;import com.github.fge.jsonschema.core.exceptions.ProcessingException;import com.github.fge.jsonschema.core.report.ProcessingReport;import com.github.fge.jsonschema.main.JsonSchema;import com.github.fge.jsonschema.main.JsonSchemaFactory;public class JsonShemaValidator {    private static Log log = LogFactory.getLog(JsonShemaValidator.class);    private final static JsonSchemaFactory factory = JsonSchemaFactory.byDefault();    /**     * validate instance and Schema,here including two functions. as follows:     * first: the Draft v4 will check the syntax both of schema and instance.     * second: instance validation.     *      * @param mainSchema     * @param instance     * @return     * @throws IOException     * @throws ProcessingException     */    public static ProcessingReport validatorSchema(String mainSchema, String instance) throws IOException, ProcessingException {        JsonNode mainNode = JsonLoader.fromString(mainSchema);        JsonNode instanceNode = JsonLoader.fromString(instance);        JsonSchema schema = factory.getJsonSchema(mainNode);        ProcessingReport processingReport = schema.validate(instanceNode);        log.info(processingReport);        return processingReport;    }}

从返回的ProcessingReport对象中可以得到校验的结果:成功与否,以及出错信息等等

附:
1、这是自动生成json-schema的工具,可以根据json字符串生成对应的json-schema内容,功能很强大.
http://jsonschema.net/#/home
2、这个网址是通过json-schema来校验json字符串是否能够通过验证,上面的文本域用于输入json-schema内容,下面的文本域用于输入json内容,验证不通过会返回相应验证未通过的地方,验证通过返回success.
http://json-schema-validator.herokuapp.com/
3、最后一个是校验json字符串的格式是否正确
http://www.bejson.com/

本博客参考文章:
http://www.cnblogs.com/jiaoyiping/p/4799754.html
http://blog.csdn.net/a_finder/article/details/46746559
http://wiki.jikexueyuan.com/project/json/schema.html

0 0
原创粉丝点击