51 votes

Encodage JSON Python

Je suis en train de coder les données en JSON en Python et j'ai eu un peu de mal. Je crois que le problème est simplement un malentendu.

Je suis relativement nouveau à Python et n'a jamais vraiment eu familiariser avec les différents Python les types de données, de sorte que c'est probablement ce qui me gâcher.

Actuellement, je suis à la déclaration d'une liste, en parcourant et une autre liste, et en ajoutant une liste dans l'autre:

import simplejson, json
data = [['apple', 'cat'], ['banana', 'dog'], ['pear', 'fish']]

x = simplejson.loads(data)
# >>> typeError: expected string or buffer..

x = simplejson.dumps(stream)
# >>> [["apple", "cat"], ["banana", "dog"], ["pear", "fish"]]
# - shouldn't JSON encoded strings be like: {{"apple":{"cat"},{"banana":"dog"}}

J'ai donc soit:

  • Je ne comprends pas la Syntaxe JSON
  • Je ne comprends pas les Pythons JSON module(s)
  • Je suis à l'utilisation inappropriée d'un type de données.

67voto

Paolo Bergantino Points 199336

Python lists traduit en JSON arrays . Cela vous donne une chaîne JSON parfaitement valide pouvant être utilisée dans une application Javascript. Pour obtenir ce que vous attendiez, vous auriez besoin d'utiliser un dict :

 >>> json.dumps({'apple': 'cat', 'banana':'dog', 'pear':'fish'})
'{"pear": "fish", "apple": "cat", "banana": "dog"}'
 

20voto

Mapio Points 441

Je pense que vous échangez simplement des décharges et des charges .

 >>> import json
>>> data = [['apple', 'cat'], ['banana', 'dog'], ['pear', 'fish']]
 

Le premier retourne sous forme de chaîne (codée JSON) son argument de données:

 >>> encoded_str = json.dumps( data )
>>> encoded_str
'[["apple", "cat"], ["banana", "dog"], ["pear", "fish"]]'
 

La seconde fait le contraire, renvoyant les données correspondant à son argument de chaîne (codé JSON):

 >>> decoded_data = json.loads( encoded_str )
>>> decoded_data
[[u'apple', u'cat'], [u'banana', u'dog'], [u'pear', u'fish']]
>>> decoded_data == data
True
 

17voto

Alex Martelli Points 330805

En simplejson (ou à la bibliothèque json en Python 2.6 et plus tard), loads prend une chaîne JSON et renvoie un Python structure de données, dumps prend un Python structure de données et renvoie une chaîne JSON. Chaîne JSON peut encoder les tableaux Javascript, pas seulement des objets, et une liste Python correspond à une chaîne JSON l'encodage d'un tableau. Pour obtenir une chaîne JSON comme

{"apple":"cat", "banana":"dog"}

l'objet Python vous passez json.dumps pourrait être:

dict(apple="cat", banana="dog")

si la chaîne JSON est également valide la syntaxe de Python pour le même dict. Je crois que la chaîne de caractères que vous dites que vous attendez est tout simplement invalid JSON syntaxe, cependant.

4voto

ylebre Points 2688

Les données de l'encodage est un keyless tableau JSON-encode avec des crochets []. Voir www.json.org pour plus d'informations à ce sujet. Les accolades sont utilisées pour les listes avec des paires clé/valeur.

À partir de www.json.org:

JSON est construit sur deux structures:

Une collection de paires nom/valeur. Dans diverses langues, ceci est réalisé en tant que un objet, d'enregistrement, struct, dictionnaire, table de hachage, assortie d'une liste, ou associatif tableau. Une liste ordonnée de valeurs. Dans la plupart des langues, ceci est réalisé comme un tableau, vecteur, une liste ou une séquence.

Un objet est un non-ordonnée ensemble de les paires nom/valeur. Un objet commence avec { (accolade gauche) et se termine avec } (accolade fermante). Chaque nom est suivi par : (deux-points) et les paires nom/valeur sont séparés par des , (virgule).

Un tableau est une collection ordonnée de des valeurs. Un tableau commence avec [ (à gauche support) et se termine par ] (à droite support). Les valeurs sont séparées par (virgule).

3voto

Javier Points 33134

JSON utilise des crochets pour les listes ( [ "one", "two", "three" ] ) et des accolades pour les dictionnaires clé / valeur (également appelés objets en JavaScript, {"one":1, "two":"b"} ).

Le vidage est tout à fait correct, vous obtenez une liste de trois éléments, chacun étant une liste de deux chaînes.

si vous vouliez un dictionnaire, peut-être quelque chose comme ça:

 x = simplejson.dumps(dict(data))
>>> {"pear": "fish", "apple": "cat", "banana": "dog"}
 

votre chaîne attendue (' {{"apple":{"cat"},{"banana":"dog"}} ') n'est pas un JSON valide. UNE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X