JSON.jl パッケージ

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

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

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

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

パッケージの追加

JuliaからJSONパッケージを使うには、JuliaにJSONパッケージを追加する必要がある。

パッケージの追加は一度だけ行えばよい。パッケージを使う度に追加する必要はない。

JuliaにJSONパッケージを追加するには、JuliaのREPLで ] キーを押下してパッケージモードに切り替える。

次に、add JSON コマンドでJSONパッケージを追加する。

(@v1.5) pkg> add JSON
Updating registry at `C:\Users\tsuka\.julia\registries\General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
Resolving package versions...
Installed BinaryProvider ─ v0.5.4
Updating `C:\Users\tsuka\.julia\environments\v1.1\Project.toml`
[682c06a0] + JSON v0.20.0
Updating `C:\Users\tsuka\.julia\environments\v1.1\Manifest.toml`
[b99e7846] ↑ BinaryProvider v0.5.3 ⇒ v0.5.4

(@v1.5) pkg>

パッケージモードを終了してJuliaモードへ戻るには、Backspaceキーを押す。

使い方

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

using を使ってJSONパッケージを使う例を次に示す。

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

julia> import JSON.json

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

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

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

julia> import JSON.json

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

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))

JSON.json()

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

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

using JSON

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

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

println(s)

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
}