JsonSchema和JsonSchemaValidator

來源:互聯網
上載者:User

標籤:接下來   相關   static   common   ret   draft   ping   red   ref   

我們最早接觸xml的時候會使用一個dtd檔案去定義xml裡可以有哪些元素和屬性等,後來發展到xml schama(是一個xsd檔案,在dtd的基礎上提供了命名空間等更強大的功能)

現在,RESTful介面和JSON大行其道,我們可以把JSON直接儲存到資料庫中,提供了比原先的關係表更容易擴充的能力(雖然JSON串的儲存仍然用到了關係表)。RESTful介面直接返回JSON資料,比返回xml更加簡潔和易讀。

xml中可以有xml schema對xml資料進行定義和校正,同樣的,JSON中也有相應的叫做JSON schema的機制,來對JSON資料進行描述和定義,並且提供了相應的機制來檢驗某個JSON字串是否符合JSON schema的定義。

JSON schema的文法接下來我會單獨寫一篇文章去總結一下,下邊是一個JSON schema的簡單例子,是我們的項目中用到的:

{    "$schema":"http://json-schema.org/draft-04/schema",    "type":"object",    "properties": {        "name": {            "type":"string"        },                "versions": {            "type":"array",            "items": {                "type":"object",                "properties": {                    "id": {                        "type":"string"                    },                                        "version": {                        "type":"integer"                    },                                        "comment": {                        "type":"string"                    }                },                                "required":["id", "version"],                "minItems":1            }        }    },        "required":["name", "versions"]}

根對象是Object類型的,有兩個屬性,name和version 其中name是一個字串,而version是一個數組,數組中的元素物件類型的,包括 字串類型的id,整形的version和字串類型的comment。

JSON scheam規定了JSON 字串中應該有哪些元素和它們的類型是什麼,也規定了哪些元素必須存在,元素的範圍等等。

要檢驗一個給定的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對象中可以得到校正的結果:成功與否,以及出錯資訊等等

 

轉載:https://www.cnblogs.com/jiaoyiping/p/4799754.html

JsonSchema和JsonSchemaValidator

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.