Julia Language
JSON
Поиск…
Синтаксис
- с использованием 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
}