Julia Language
JSON
Recherche…
Syntaxe
- en utilisant JSON
- JSON.parse (str)
- JSON.json (obj)
- JSON.print (io, obj, indent)
Remarques
Puisque ni les objets Julia Dict
ni les objets JSON ne sont classés de manière inhérente, il est préférable de ne pas utiliser l'ordre des paires clé-valeur dans un objet JSON.
Installer JSON.jl
JSON est un format d'échange de données populaire. La bibliothèque JSON la plus populaire pour Julia est JSON.jl. Pour installer ce paquet, utilisez le gestionnaire de paquets:
julia> Pkg.add("JSON")
L'étape suivante consiste à tester si le package fonctionne sur votre machine:
julia> Pkg.test("JSON")
Si tous les tests réussissent, la bibliothèque est prête à être utilisée.
Analyse JSON
JSON qui a été codé en tant que chaîne peut facilement être analysé en un type Julia standard:
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]
Il y a quelques propriétés immédiates de JSON.jl de note:
- Les types JSON correspondent à des types sensibles dans Julia: L'objet devient
Dict
, le tableau devientVector
, le nombre devientInt64
ouFloat64
, le booléen devientBool
et null devientnothing::Void
. - JSON est un format de conteneur non typé: ainsi, les vecteurs Julia renvoyés sont de type
Vector{Any}
, et les dictionnaires retournés sont de typeDict{String, Any}
. - La norme JSON ne fait pas la distinction entre les nombres entiers et décimaux, mais JSON.jl le fait. Un nombre sans point décimal ou notation scientifique est analysé dans
Int64
, tandis qu'un nombre avec un point décimal est analysé dansFloat64
. Cela correspond étroitement au comportement des analyseurs JSON dans de nombreuses autres langues.
Sérialisation de JSON
La fonction JSON.json
sérialise un objet Julia en une String
Julia contenant 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 une chaîne n'est pas souhaitée, JSON peut être imprimé directement dans un flux IO:
julia> JSON.print(STDOUT, [1, 2, true, false, "x"])
[1,2,true,false,"x"]
Notez que STDOUT
est la valeur par défaut et peut être omis dans l'appel ci-dessus.
Une impression plus jolie peut être obtenue en passant le paramètre d' indent
facultatif:
julia> JSON.print(STDOUT, Dict(:a => :b, :c => :d), 4)
{
"c": "d",
"a": "b"
}
Il existe une sérialisation sérieuse par défaut pour les types complexes 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
}