Julia Language
JSON
Szukaj…
Składnia
- za pomocą JSON
- JSON.parse (str)
- JSON.json (obj)
- JSON.print (io, obj, tiret)
Uwagi
Ponieważ ani obiekty Julii Dict
ani JSON nie są z natury uporządkowane, najlepiej nie polegać na kolejności par klucz-wartość w obiekcie JSON.
Instalowanie JSON.jl
JSON to popularny format wymiany danych. Najpopularniejszą biblioteką JSON dla Julii jest JSON.jl. Aby zainstalować ten pakiet, użyj menedżera pakietów:
julia> Pkg.add("JSON")
Następnym krokiem jest sprawdzenie, czy pakiet działa na twoim komputerze:
julia> Pkg.test("JSON")
Jeśli wszystkie testy przeszły pomyślnie, biblioteka jest gotowa do użycia.
Przetwarzanie JSON
Kod JSON, który został zakodowany jako ciąg, można łatwo przeanalizować do standardowego typu 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]
Uwaga: JSON.jl ma kilka bezpośrednich właściwości:
- Typy JSON odwzorowują na sensowne typy w Julii: Obiekt staje się
Dict
, tablica staje sięVector
, liczbaInt64
się naInt64
lubFloat64
, boolean staje sięBool
, a null staje sięnothing::Void
. - JSON jest nietypowym formatem kontenera: w ten sposób zwrócone wektory Julia są typu
Vector{Any}
, a zwrócone słowniki są typuDict{String, Any}
. - Standard JSON nie rozróżnia liczb całkowitych od liczb dziesiętnych, ale JSON.jl tak. Liczba bez kropki dziesiętnej lub notacji naukowej jest analizowana na
Int64
, podczas gdy liczba z kropką dziesiętną jest analizowana naFloat64
. Jest to ściśle zgodne z zachowaniem parserów JSON w wielu innych językach.
Serializacja JSON
JSON.json
funkcja serializes obiekt Julia do Julia String
zawierający 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}
Jeśli ciąg nie jest pożądany, JSON można wydrukować bezpośrednio do strumienia IO:
julia> JSON.print(STDOUT, [1, 2, true, false, "x"])
[1,2,true,false,"x"]
Zauważ, że STDOUT
jest domyślny i można go pominąć w powyższym wywołaniu.
Ładniejsze drukowanie można osiągnąć, przekazując opcjonalny parametr indent
:
julia> JSON.print(STDOUT, Dict(:a => :b, :c => :d), 4)
{
"c": "d",
"a": "b"
}
Domyślna serializacja jest złożona dla złożonych typów Julii:
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
}