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 zuInt64
oderFloat64
, Boolean wird zuBool
und 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
Int64
analysiert, während eine Zahl mit Dezimalpunkt inFloat64
analysiertFloat64
. 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
}