{"id":115,"date":"2021-10-31T11:21:24","date_gmt":"2021-10-31T03:21:24","guid":{"rendered":"https:\/\/www.zhangshuwei.com\/?p=115"},"modified":"2021-10-31T11:21:24","modified_gmt":"2021-10-31T03:21:24","slug":"json-schema-%e6%a0%a1%e9%aa%8cjson%ef%bc%8cjava%e4%bb%a3%e7%a0%81%e7%a4%ba%e4%be%8b","status":"publish","type":"post","link":"https:\/\/www.zhangshuwei.com\/index.php\/2021\/10\/31\/json-schema-%e6%a0%a1%e9%aa%8cjson%ef%bc%8cjava%e4%bb%a3%e7%a0%81%e7%a4%ba%e4%be%8b\/","title":{"rendered":"Json Schema \u6821\u9a8cjson\uff0cjava\u4ee3\u7801\u793a\u4f8b"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code lang=\"xml\" class=\"language-xml\">&lt;!-- json schema \u8f6c\u6362 fge -->\n&lt;dependency>\n    &lt;groupId>com.github.fge&lt;\/groupId>\n    &lt;artifactId>json-schema-validator&lt;\/artifactId>\n    &lt;version>2.2.6&lt;\/version>\n&lt;\/dependency><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">import com.fasterxml.jackson.databind.JsonNode;\nimport com.github.fge.jackson.JsonLoader;\nimport com.github.fge.jackson.JsonNodeReader;\nimport com.github.fge.jsonschema.core.report.LogLevel;\nimport com.github.fge.jsonschema.core.report.ProcessingMessage;\nimport com.github.fge.jsonschema.core.report.ProcessingReport;\nimport com.github.fge.jsonschema.main.JsonSchemaFactory;\nimport org.springframework.util.ResourceUtils;\n \nimport java.io.FileReader;\nimport java.io.IOException;\nimport java.util.Iterator;\n \npublic class JsonSchemaUtil {\n \n    \/**\n     * @param jsonStr \u9a8c\u8bc1json\u5b57\u7b26\u4e32\n     *\/\n    public static JsonNode strToJsonNode(String jsonStr) {\n        JsonNode jsonNode = null;\n        try {\n            jsonNode = JsonLoader.fromString(jsonStr);\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        return jsonNode;\n    }\n \n \n    \/**\n     * @param jsonFilePath jsonSchema\u6587\u4ef6\u8def\u5f84\n     *\/\n    public static JsonNode schemaToJsonNode(String jsonFilePath) {\n        JsonNode jsonSchemaNode = null;\n        try {\n            jsonSchemaNode = new JsonNodeReader().fromReader(new FileReader(ResourceUtils.getFile(jsonFilePath)));\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        return jsonSchemaNode;\n    }\n \n    \/**\n     * @param jsonNode   json\u6570\u636enode\n     * @param schemaNode jsonSchema\u7ea6\u675fnode\n     *\/\n    private static boolean getProcessingReport(JsonNode jsonNode, JsonNode schemaNode) {\n        \/\/fge\u9a8c\u8bc1json\u6570\u636e\u662f\u5426\u7b26\u5408json schema\u7ea6\u675f\u89c4\u5219\n        ProcessingReport report = JsonSchemaFactory.byDefault().getValidator().validateUnchecked(schemaNode, jsonNode);\n        if (report.isSuccess()) {\n            \/\/ \u6821\u9a8c\u6210\u529f\n            return true;\n        } else {\n            Iterator&lt;ProcessingMessage> it = report.iterator();\n            StringBuilder ms = new StringBuilder();\n            ms.append(\"json\u683c\u5f0f\u9519\u8bef: \");\n            while (it.hasNext()) {\n                ProcessingMessage pm = it.next();\n                if (!LogLevel.WARNING.equals(pm.getLogLevel())) {\n                    ms.append(pm);\n                }\n            }\n            System.err.println(ms);\n            return false;\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p>schema<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\n  \"$schema\":\"http:\/\/json-schema.org\/draft-04\/schema#\",\n  \"title\":\"cat\",\n  \"properties\":{\n    \"name\":{\n      \"type\":\"string\"\n    },\n    \"age\":{\n      \"type\":\"number\",\n      \"description\":\"Your cat's age in years\"\n    },\n    \"declawed\":{\n      \"type\":\"boolean\"\n    },\n    \"description\":{\n      \"type\":\"string\"\n    }\n  },\n  \"required\":[\n    \"name\",\n    \"age\",\n    \"declawed\"\n  ]\n}<\/code><\/pre>\n\n\n\n<p>json<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\n    \"name\":\"TOM\",\n    \"age\":23,\n    \"declawed\":false,\n    \"description\":\"TOM loves to sleep all day.\"\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>schema json<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[28,35],"class_list":["post-115","post","type-post","status-publish","format-standard","hentry","category-servers","tag-java","tag-json"],"_links":{"self":[{"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/posts\/115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/comments?post=115"}],"version-history":[{"count":1,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/posts\/115\/revisions"}],"predecessor-version":[{"id":116,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/posts\/115\/revisions\/116"}],"wp:attachment":[{"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/media?parent=115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/categories?post=115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/tags?post=115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}