logo

JuliaでJSONファイルを読み書きする方法 (JSON.jl) 📂Julia

JuliaでJSONファイルを読み書きする方法 (JSON.jl)

概要

Juliaでjsonファイルを扱うパッケージには、JSON.jlJSON3.jlSerde.jlなどがある。本ドキュメントではJSON.jlについて説明する。

JSON.jlは純粋なJuliaで作られたパッケージで、jsonファイルをパースし、出力する機能を提供する。Juliaの標準ライブラリではないが、パッケージがGitHubでJuliaIOグループにまとめられており、管理者がJuliaの開発者であることから、公式パッケージと言っても差し支えないだろう。

コード

書き込み

辞書をjsonファイルに

以下のコードで辞書をjsonファイルに保存できる。JSON.printの3番目の引数にindentを与えると、美しく保存される。

using JSON

dict_data = Dict("name"      => "Jang, Wonyoung",
                 "age"       => 19,
                 "group"     => "IVE",
                 "nicknames" => ["Wonnyo", "Gatgi", "Lucky-Vicky"])

open("wonnyo.json", "w") do io
    JSON.print(io, dict_data)
end

open("pretty_wonnyo.json", "w") do io
    JSON.print(io, dict_data, 4)
end

文字列をjsonファイルに

以下のコードで文字列をjsonファイルに保存できます。基本的には辞書と同じ文法ですが、文字列はJSON.parse()で一度パースする必要がある。同様に3番目の引数にindentを入力すると、美しく保存される。

str_data = """
{
    "name": "Jang, Wonyoung",
    "age": 19,
    "group": "IVE",
    "nicknames": ["Wonnyo", "Gatgi", "Lucky-Vicky"]
}
"""

open("wonnyo.json", "w") do io
    JSON.print(io, JSON.parse(str_data))
end

open("pretty_wonnyo.json", "w") do io
    JSON.print(io, JSON.parse(str_data), 4)
end

もしくは、以下のようにJSON.write関数を使用して、文字列を直接jsonファイルに保存することもできる。この場合、空白と改行がそのまま反映される。

str_data = """
{
    "name": "Jang, Wonyoung",
    "age": 19,
    "group": "IVE",
    "nicknames": ["Wonnyo", "Gatgi", "Lucky-Vicky"]
}
"""

unpretty_str_data = """
{"name": "Jang, Wonyoung", "age": 19, "group": "IVE", "nicknames": ["Wonnyo", "Gatgi", "Lucky-Vicky"]}
"""

open("str2json.json", "w") do io
    JSON.write(io, str_data)
end

open("unpretty_str2json.json", "w") do io
    JSON.write(io, unpretty_str_data)
end

読み込み

以下のコードでjsonファイルを読み込める。

julia> using JSON

julia> dcit_from_json = JSON.parsefile("wonnyo.json")
Dict{String, Any} with 4 entries:
  "name"      => "Jang, Wonyoung"
  "nicknames" => Any["Wonnyo", "Gatgi", "Lucky-Vicky"]
  "group"     => "IVE"
  "age"       => 19

または、次のように直接IOストリームで読み込むこともできる。

julia> open("wonnyo.json", "r") do io
           str_from_json = read(io, String)
           data_from_str = JSON.parse(str_from_json)
       end
Dict{String, Any} with 4 entries:
  "name"      => "Jang, Wonyoung"
  "nicknames" => Any["Wonnyo", "Gatgi", "Lucky-Vicky"]
  "group"     => "IVE"
  "age"       => 19

環境

  • OS: Windows11
  • バージョン: Julia 1.11.3, JSON v0.21.4