Julia Language
JSON
Suche…
Syntax
- mit JSON
- JSON.parse (str)
- JSON.json (obj)
- JSON.print (io, obj, einzug)
Bemerkungen
Da weder Julia Dict noch JSON-Objekte inhärent geordnet sind, sollten Sie sich nicht auf die Reihenfolge der Schlüssel-Wert-Paare in einem JSON-Objekt verlassen.
JSON.jl installieren
JSON ist ein verbreitetes Datenaustauschformat. Die beliebteste JSON-Bibliothek für Julia ist JSON.jl. Um dieses Paket zu installieren, verwenden Sie den Paketmanager:
julia> Pkg.add("JSON")
Im nächsten Schritt testen Sie, ob das Paket auf Ihrem Computer funktioniert:
julia> Pkg.test("JSON")
Wenn alle Tests bestanden sind, ist die Bibliothek einsatzbereit.
JSON analysieren
JSON, das als Zeichenfolge codiert wurde, kann leicht in einen Standard-Julia-Typ analysiert werden:
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]
Es gibt einige unmittelbare Eigenschaften von JSON.jl:
- JSON-Typen werden in Julia sinnvollen Typen zugeordnet: Objekt wird zu
Dict, Array wird zuVector, Nummer wird zuInt64oderFloat64, Boolean wird zuBoolund Null wird zunothing::Void. - JSON ist ein nicht typisiertes Containerformat: Die zurückgegebenen Julia-Vektoren sind vom Typ
Vector{Any}und die zurückgegebenen Wörterbücher vom TypDict{String, Any}. - Der JSON-Standard unterscheidet nicht zwischen Ganzzahlen und Dezimalzahlen, JSON.jl jedoch. Eine Zahl ohne Dezimalpunkt oder wissenschaftliche Notation wird in
Int64analysiert, während eine Zahl mit Dezimalpunkt inFloat64analysiertFloat64. Dies stimmt eng mit dem Verhalten von JSON-Parsern in vielen anderen Sprachen überein.
Serialisierung von JSON
Die JSON.json Funktion serialisiert ein Julia-Objekt in einen Julia- String , der JSON enthält:
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}
Wenn keine Zeichenfolge gewünscht wird, kann JSON direkt in einen E / A-Stream gedruckt werden:
julia> JSON.print(STDOUT, [1, 2, true, false, "x"])
[1,2,true,false,"x"]
Beachten Sie, dass STDOUT die Standardeinstellung ist und bei dem obigen Aufruf weggelassen werden kann.
Ein besserer Druck kann durch Übergeben des optionalen indent werden:
julia> JSON.print(STDOUT, Dict(:a => :b, :c => :d), 4)
{
"c": "d",
"a": "b"
}
Es gibt eine normale Standardserialisierung für komplexe Julia-Typen:
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
}