サーチ…


構文

  • JSONを使用して
  • JSON.parse(str)
  • JSON.json(obj)
  • JSON.print(io、obj、indent)

備考

Julia DictもJSONオブジェクトも本質的に順序付けされていないので、JSONオブジェクトのキーと値のペアの順序に頼らないのが最善です。

JSON.jlのインストール

JSONは一般的なデータ交換形式です。 Juliaの最も一般的なJSONライブラリはJSON.jlです。このパッケージをインストールするには、パッケージマネージャを使用します。

julia> Pkg.add("JSON")

次のステップは、パッケージがマシン上で動作しているかどうかをテストすることです。

julia> Pkg.test("JSON")

すべてのテストに合格すると、ライブラリは使用できる状態になります。

JSONの解析

文字列としてエンコードされたJSONは、標準のJulia型に簡単に解析できます。

julia> using JSON

julia> JSON.parse("""{
           "this": ["is", "json"],
           "numbers": [85, 16, 12.0],
           "and": [true, false, null]
       }""")
Dict{String,Any} with 3 entries:
  "this"    => Any["is","json"]
  "numbers" => Any[85,16,12.0]
  "and"     => Any[true,false,nothing]

注意のJSON.jlのいくつかの即時のプロパティがあります:

  • JSON型はJuliaの感覚型にマップされます。オブジェクトはDictになり、配列はVectorになり、数値はInt64またはFloat64になり、ブール値はBoolになり、nullはnothing::Void
  • JSONは型なしのコンテナ形式です。返されるJuliaベクトルはVector{Any}型で、返される辞書はDict{String, Any}です。
  • JSON標準では整数と小数は区別されませんが、JSON.jlでは区別されます。小数点または科学的表記のない数値はInt64に解析されFloat64が、小数点のある数値は解析されてFloat64ます。これは他の多くの言語でのJSONパーサの動作と密接に一致します。

JSONのシリアライズ

JSON.json関数は、JuliaオブジェクトをJSONを含むJulia Stringシリアル化します。

julia> using JSON

julia> JSON.json(Dict(:a => :b, :c => [1, 2, 3.0], :d => nothing))
"{\"c\":[1.0,2.0,3.0],\"a\":\"b\",\"d\":null}"

julia> println(ans)
{"c":[1.0,2.0,3.0],"a":"b","d":null}

文字列が必要でない場合は、JSONを直接IOストリームに出力することができます:

julia> JSON.print(STDOUT, [1, 2, true, false, "x"])
[1,2,true,false,"x"]

STDOUTはデフォルトであり、上記の呼び出しで省略することができます。

よりきれいな印刷は、オプションのindentパラメータを渡すことで実現できます。

julia> JSON.print(STDOUT, Dict(:a => :b, :c => :d), 4)
{
    "c": "d",
    "a": "b"
}

複雑なジュリアタイプの場合、デフォルトのシリアル化は正常です。

julia> immutable Point3D
           x::Float64
           y::Float64
           z::Float64
       end

julia> JSON.print(Point3D(1.0, 2.0, 3.0), 4)
{
    "y": 2.0,
    "z": 3.0,
    "x": 1.0
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow