Поиск…


Синтаксис

  • с использованием JSON
  • JSON.parse (ул)
  • JSON.json (OBJ)
  • JSON.print (io, obj, indent)

замечания

Поскольку ни объекты Julia Dict ни объекты JSON по своей природе не упорядочены, лучше не полагаться на порядок пар ключ-значение в объекте JSON.

Установка JSON.jl

JSON - популярный формат обмена данными. Самой популярной библиотекой JSON для Julia является JSON.jl. Чтобы установить этот пакет, используйте диспетчер пакетов:

julia> Pkg.add("JSON")

Следующий шаг - проверить, работает ли пакет на вашем компьютере:

julia> Pkg.test("JSON")

Если все тесты пройдены, библиотека готова к использованию.

Разбор JSON

JSON, который был закодирован как строка, может быть легко проанализирован стандартным типом 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]

Есть несколько непосредственных свойств JSON.jl примечания:

  • Типы JSON сопоставляются с разумными типами в Julia: Object становится Dict , array становится Vector , число становится Int64 или Float64 , boolean становится Bool , а null становится nothing::Void .
  • JSON - это нетипизированный формат контейнера: таким образом, возвращенные векторы Julia имеют тип Vector{Any} , а возвращаемые словари имеют тип Dict{String, Any} .
  • Стандарт JSON не различает целые числа и десятичные числа, но JSON.jl делает. Число без десятичной точки или научной нотации анализируется в Int64 , тогда как число с десятичной точкой анализируется на Float64 . Это тесно связано с поведением парсеров JSON на многих других языках.

Сериализация JSON

Функция JSON.json сериализует объект Julia в String Julia, содержащую 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}

Если строка не нужна, JSON можно печатать непосредственно в потоке ввода-вывода:

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

Обратите внимание, что STDOUT является значением по умолчанию и может быть опущен в вышеуказанном вызове.

Более мелкая печать может быть достигнута путем передачи необязательного параметра indent :

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

Существует стандартная сериализация по умолчанию для сложных типов Julia:

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow