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 devient Vector , le nombre devient Int64 ou Float64 , le booléen devient Bool et null devient nothing::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 type Dict{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é dans Float64 . 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
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow