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 zu Vector , Nummer wird zu Int64 oder Float64 , Boolean wird zu Bool und Null wird zu nothing::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 Typ Dict{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 in Float64 analysiert Float64 . 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
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow