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 , liczba Int64 się na Int64 lub Float64 , 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ą typu Dict{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 na Float64 . 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
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow