Julia Language
JSON
Buscar..
Sintaxis
- usando JSON
- JSON.parse (str)
- JSON.json (obj)
- JSON.print (io, obj, sangría)
Observaciones
Dado que ni Julia Dict
ni los objetos JSON están intrínsecamente ordenados, es mejor no confiar en el orden de los pares clave-valor en un objeto JSON.
Instalando JSON.jl
JSON es un popular formato de intercambio de datos. La biblioteca JSON más popular para Julia es JSON.jl. Para instalar este paquete, use el administrador de paquetes:
julia> Pkg.add("JSON")
El siguiente paso es probar si el paquete está funcionando en su máquina:
julia> Pkg.test("JSON")
Si todas las pruebas pasaron, entonces la biblioteca está lista para su uso.
Analizando JSON
JSON que se ha codificado como una cadena se puede analizar fácilmente en un tipo de Julia estándar:
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]
Hay algunas propiedades inmediatas de JSON.jl de la nota:
- Los tipos JSON se asignan a tipos sensibles en Julia: el objeto se convierte en
Dict
, la matriz se convierte enVector
, el número se convierte enInt64
oFloat64
, el booleano se convierte enBool
y el valor nulo se convierte ennothing::Void
. - JSON es un formato de contenedor sin tipo: por lo tanto, los vectores Julia devueltos son de tipo
Vector{Any}
, y los diccionarios devueltos son de tipoDict{String, Any}
. - El estándar JSON no distingue entre números enteros y decimales, pero JSON.jl lo hace. Un número sin un punto decimal o una notación científica se analiza en
Int64
, mientras que un número con un punto decimal se analiza enFloat64
. Esto coincide estrechamente con el comportamiento de los analizadores JSON en muchos otros idiomas.
Serialización JSON
La función JSON.json
serializa un objeto Julia en una String
Julia que contiene 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}
Si no se desea una cadena, JSON se puede imprimir directamente en una secuencia de IO:
julia> JSON.print(STDOUT, [1, 2, true, false, "x"])
[1,2,true,false,"x"]
Tenga en cuenta que STDOUT
es el valor predeterminado y se puede omitir en la llamada anterior.
La impresión más bonita se puede lograr al pasar el parámetro de indent
opcional:
julia> JSON.print(STDOUT, Dict(:a => :b, :c => :d), 4)
{
"c": "d",
"a": "b"
}
Hay una serialización por defecto para los tipos complejos de 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
}