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 diventaInt64
oFloat64
, booleano diventaBool
e 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
}