Julia JSON package

JSONとは「JavaScript Object Notaion」の略称で、テキストベースの軽量なデータ交換フォーマットである。

JSONではデータを次のように表記する。

{
  "empno": 1901,
  "ename": "佐藤愛桜",
  "hiredate": "2019/05/06",
  "deptno": 1
}

JuliaからJSON形式のデータを扱うには、JSON.jl パッケージが必要になる。

目次

  1. 1 パッケージの追加
  2. 2 パッケージの宣言
    1. 2.1 import
    2. 2.2 using
  3. 3 JSON.parse
  4. 4 JSON.json
  5. 5 JSON.print
  6. 6 参考文献

1 パッケージの追加

Julia から JSON パッケージを使うには、Julia に JSON パッケージを追加する必要がある。JSON パッケージを追加せずに JSON パッケージを使用しようとすると、エラーが発生する。

julia> using JSON
│ Package JSON not found, but a package named JSON is available from a registry.
│ Install package?
│   (@v1.9) pkg> add JSON
└ (y/n/o) [y]:

ここで「y」のキーを押せば、JSON パッケージが追加される。

パッケージの追加は、Julia のインストール後に一度だけ行えばよい。パッケージを使う度に追加する必要はない。

2 パッケージの宣言

JSONパッケージを使うには、using または import でJSONパッケージの使用を宣言する必要がある。JSON パッケージの使用を宣言せずに JSON パッケージを使用すると、エラーが発生する。

julia> d = JSON.json(Dict("a" => 1))
ERROR: UndefVarError: `JSON` not defined
Stacktrace:
 [1] top-level scope at REPL[1]:1

2.1 import

import キーワードを使ってパッケージの使用を宣言すると、そのパッケージに含まれる定数、型、関数及びメソッド等を使用できる。定数、型、関数及びメソッド等を使用するときは、パッケージ名で修飾する必要がある。

import キーワードを使ってJSONパッケージを使う例を次に示す。

julia> import JSON

julia> d = json(Dict("a" => 1))
ERROR: UndefVarError: `json` not defined
Stacktrace:
 [1] top-level scope
   @ REPL[2]:1

julia> d = JSON.json(Dict("a" => 1))
"{\"a\":1}"

2.2 using

using キーワードを使ってパッケージの使用を宣言すると、そのパッケージに含まれる定数、型、関数及びメソッド等はエクスポートされるため、パッケージ名で修飾せずに定数、型、関数及びメソッド等を使用できる。

using キーワードを使って JSON パッケージを使う例を以下に示す。

julia> using JSON

julia> d = json(Dict("a" => 1))
"{\"a\":1}"

3 JSON.parse

JSONはただの文字列でデータ構造を記述してあるため、データとしては取り扱いにくい。JSON.parse() を使って、JSON形式の文字列をDictに変換できる。

JSON.parse(s::AbstractString; dicttype=Dict, inttype=Int64)
s
パースする文字列
dicttype
辞書型、または辞書型を返す関数のインスタンス
inttype
整数をどのように解析するか

DictからJSONへ変換する例を次に示す。

using JSON

# JSON
j = """{ "foo" : 1, "bar" : 2 }"""

# JSONからDictへ変換
d = JSON.parse(j)

println(get(d, "foo", 0))
println(get(d, "bar", 0))

4 JSON.json

Dictはデータとして取り扱いやすいが、ファイルに書き込むなど、データ交換にはJSON形式の文字列にした方が都合がよい。

JSON.json() でDictをJSON形式の文字列へ変換できる。

using JSON

d = Dict("a" => 1, "b" => 2)

# DictからJSONへ変換
s = JSON.json(d)

println(s)

5 JSON.print

改行とインデント(字下げ)を加えてJSONを表示する。

JSON.print(a::AbstractDict, indent)
a
辞書型
indent
インデント

インデントを2、4および8にしてJSONを表示する例を次に示す。

julia> JSON.print(Dict("a" => 1, "b" => 2), 2)
{
  "b": 2,
  "a": 1
}

julia> JSON.print(Dict("a" => 1, "b" => 2), 4)
{
    "b": 2,
    "a": 1
}

julia> JSON.print(Dict("a" => 1, "b" => 2), 8)
{
        "b": 2,
        "a": 1
}

6 参考文献

JSON.org 2002, JuliaIO/JSON.jl: JSON parsing and printing

Internet Engineering Task Force 2017. RFC8259: The JavaScript Object Notation (JSON) Data Interchange Format