JSONとは「JavaScript Object Notaion」の略称で、テキストベースの軽量なデータ交換フォーマットである。
JSONではデータを次のように表記する。
{
"empno": 1901,
"ename": "佐藤愛桜",
"hiredate": "2019/05/06",
"deptno": 1
}
JuliaからJSON形式のデータを扱うには、JSON.jl パッケージが必要になる。
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 のインストール後に一度だけ行えばよい。パッケージを使う度に追加する必要はない。
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
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}"
using キーワードを使ってパッケージの使用を宣言すると、そのパッケージに含まれる定数、型、関数及びメソッド等はエクスポートされるため、パッケージ名で修飾せずに定数、型、関数及びメソッド等を使用できる。
using キーワードを使って JSON パッケージを使う例を以下に示す。
julia> using JSON
julia> d = json(Dict("a" => 1))
"{\"a\":1}"
JSONはただの文字列でデータ構造を記述してあるため、データとしては取り扱いにくい。JSON.parse()
を使って、JSON形式の文字列をDictに変換できる。
JSON.parse(s::AbstractString; dicttype=Dict, inttype=Int64)
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))
Dictはデータとして取り扱いやすいが、ファイルに書き込むなど、データ交換にはJSON形式の文字列にした方が都合がよい。
JSON.json()
でDictをJSON形式の文字列へ変換できる。
using JSON
d = Dict("a" => 1, "b" => 2)
# DictからJSONへ変換
s = JSON.json(d)
println(s)
改行とインデント(字下げ)を加えてJSONを表示する。
JSON.print(a::AbstractDict, 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
}
JSON.org 2002, JuliaIO/JSON.jl: JSON parsing and printing
Internet Engineering Task Force 2017. RFC8259: The JavaScript Object Notation (JSON) Data Interchange Format