Julia Language
JSON
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 diventaVector, il numero diventaInt64oFloat64, booleano diventaBoole null diventanothing::Void. - JSON è un formato contenitore non tipizzato: i vettori di Julia restituiti sono di tipo
Vector{Any}e i dizionari restituiti sono di tipoDict{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 inFloat64. 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
}