MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

JSON初心者のためのJSON Schema入門


Introduction to JavaScript Object Notation: A To-the-Point Guide to JSON (English Edition)

目次

はじめに

最近、

構造化されたデータや、

設定ファイルなどにJSONを使うことが多くなってきました。

myenigma.hatenablog.com

しかし、JSONは

あまりにもフレキシビリティが高いデータフォーマットなので、

意図しない構造のJSONファイルを受け取ってしまうことがあります。

そのようなときに、JSONの構造やデータの中身が意図したものになっているのか、

確認する手法が必要です。

 

そこで、JSONファイルの構造やデータの中身を定義したものを、

JSON Schemaと呼びます。

今回の記事では、JSON初心者のために、

JSON Schemaを利用するのに必要最低限の方法を紹介したいと思います。

 

JSON Schemaとは?

前述の通り、JSON Schemaは、

JSONの構造を定義したものです。

 

また、JSON SchemaはJSONの構造を、

JSONファイルとして定義します。

例えば、下記のようなJSONファイルがあったとします。

f:id:meison_amsl:20190512172957p:plain

json_schema_sample/sample.json at master · AtsushiSakai/json_schema_sample · GitHub

このJSONファイルのJSON schemaは、

下記のようになります。

f:id:meison_amsl:20190512173058p:plain

json_schema_sample/json.schema at master · AtsushiSakai/json_schema_sample · GitHub

  

JSON schemaでは、

フィールドの型(文字列や数値、配列など)を定義したり、

必ず必要なフィールドを指定したり、

フィールドの配列の個数や、

フィールドの数値の範囲なども定義することができます。

またpatternのタグを使うことで、正規表現を使って、

JSONのフィールドが定義を満たしているかを確認することができます。

使用できるタグに関しては、下記を参照してください。

 

このJSON Schemaを使うことで、

JSONファイルが正しい構造になっているのかを

自動的に確認(Validate)したり、

JSONデータのドキュメントを生成したりすることができます。

 

JSONファイルからJSON Schemaを生成する

すでに、Schemaの元となるJSONファイルが手元にある場合は、

そのJSONファイルから、JSON Schemaを生成できると便利です。

 

下記のWebツールは、

ブラウザからJSONデータを元に、

JSON Schemaを生成することができます。

 

また、CLIのツールとしては、

下記のPythonライブラリを使うことで、

JSON schemaを生成することも可能です。

(メンテされていないように見えますが。。)

 

JSON SchemaでJSONをvalidateする

JSON schemaのデータ構造を元に、

JSONデータのチェックをするのが、

JSON schemaのメインの用途です。

 

JSON schemaによるJSONのvalidateするツールは色々ありますが、

代表的なものとしては、

下記のようなPython製のライブラリがあります。

 

下記のコードは、

実際にJSONファイルとJSON schemaファイルを読み込んで、

jsonschemaでvalidateするサンプルコードです。

""" 

json schema validate sample

author: Atsushi Sakai

"""

from jsonschema import validate
import json


def main():
    print("start!!")

    f = open("sample.json")
    jsond = json.load(f)
    f.close()
    print("JSON data:")
    print(jsond)

    f = open("json.schema")
    schema = json.load(f)
    f.close()

    print("JSON schema:")
    print(schema)


    # OK 
    validate(instance=jsond, schema=schema)

    # NG
    validate(instance={"name" : "Eggs", "price" : 34.99}, schema=schema)

    print("done!!")


if __name__ == '__main__':
    main()

github.com

 

一つ目のvalidate関数は、

schema通りのJSONなので、何も起きませんが、

二つ目のvalidate関数は、

schemaで指定した形式のJSONではないので、

例外が発生します。

 

このように、JSON Schemaを使って、

JSONの構造を確認することができます。

 

JSON Schemaからドキュメントを生成する

JSON Schemaは、JSONの構造を定義したものですが、

JSON SchemaはJSONで定義されることが多いので、

人間が読むには厳しい時があります。

 

そこで、JSON Schemaのファイルから、

自動的に人間が読みやすいドキュメントを生成するツールがあります。

 

例えば、下記のbootprintは

javascript(node.js)のツールですが、

コマンドラインから、json schemaファイルを指定すると、

下記のように、自動的にhtmlベースのドキュメントを生成してくれます。

f:id:meison_amsl:20190512171657p:plain

 

JSON SchemaからJSON解釈用コードを生成する

JSON Schemaから、

JSON解釈用のコードを自動生成することもできます。

 

例えば、下記のWebツールを使うと、

app.quicktype.io

JSON Schemaから、

下記の言語のJSON解釈用のコードを自動生成することができます。

f:id:meison_amsl:20190512181833p:plain:w100

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com


Introduction to JavaScript Object Notation: A To-the-Point Guide to JSON (English Edition)

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com