Ricerca…


Sintassi

  • usando JSON
  • JSON.parse (str)
  • JSON.json (obj)
  • JSON.print (io, obj, indent)

Osservazioni

Poiché né Julia Dict né gli oggetti JSON sono intrinsecamente ordinati, è meglio non fare affidamento sull'ordine delle coppie chiave-valore in un oggetto JSON.

Installazione di JSON.jl

JSON è un popolare formato di interscambio dati. La più famosa libreria JSON per Julia è JSON.jl. Per installare questo pacchetto, utilizzare il gestore pacchetti:

julia> Pkg.add("JSON")

Il prossimo passo è verificare se il pacchetto funziona sulla tua macchina:

julia> Pkg.test("JSON")

Se tutti i test sono passati, la libreria è pronta per l'uso.

Parsing JSON

JSON che è stato codificato come stringa può essere facilmente analizzato in un tipo standard di 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]

Ci sono alcune proprietà immediate di JSON.jl di nota:

  • I tipi JSON si associano a tipi sensibili in Julia: l'oggetto diventa Dict , l'array diventa Vector , il numero diventa Int64 o Float64 , booleano diventa Bool e null diventa nothing::Void .
  • JSON è un formato contenitore non tipizzato: i vettori di Julia restituiti sono di tipo Vector{Any} e i dizionari restituiti sono di tipo Dict{String, Any} .
  • Lo standard JSON non distingue tra numeri interi e numeri decimali, ma JSON.jl lo fa. Un numero senza un punto decimale o una notazione scientifica viene analizzato in Int64 , mentre un numero con un punto decimale viene analizzato in Float64 . Questo corrisponde strettamente al comportamento dei parser JSON in molte altre lingue.

Serializzazione JSON

La funzione JSON.json serializza un oggetto Julia in una String Julia contenente JSON:

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}

Se una stringa non è desiderata, JSON può essere stampato direttamente su un flusso IO:

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

Si noti che STDOUT è l'impostazione predefinita e può essere omessa nella chiamata sopra.

La stampa più bella può essere ottenuta passando il parametro del indent facoltativo:

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

Esiste una serializzazione sana di mente per tipi di Julia complessi:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow