7
votes

Python décode Json

J'ai le JSON suivant:

for table in myList:
    for field in table:
         print (field("type"))
         print (field("fk"))  


0 commentaires

6 Réponses :


9
votes

Essayez xxx

au lieu de xxx


1 commentaires

C'est la bonne façon de le faire. json.loads () renvoie un dictionnaire Python de l'objet JSON.



4
votes

L'accord Je suppose que vous créez un décodeur, mais ne le disons jamais à décodage () .

Utilisation: xxx


3 commentaires

Bon point. Mais: pour O à obj: pour T in O: impression (t) s l a t b a n n e d


Pour votre JSON, Python va retourner un objet dict (dictionnaire). Par défaut, itération sur elle obtient les clés, qui sont des chaînes. Itération sur une chaîne vous contient des caractères. Vous pouvez utiliser .iteritems () pour obtenir des tuples de (touche, valeur) ou .itivealues ​​() Pour obtenir des valeurs de votre choix boucle sur le dictionnaire.


@Coolstrewaw, le résultat de décodage () est un dictionnaire python. Vous voudrez probablement itérateur sur O.Items (), car vous êtes itération sur les clés, puis sur les lettres des clés



1
votes

La chaîne que vous fournissez dans l'exemple n'est pas valide JSON.

La dernière virgule entre deux bretelles frisées de fermeture est illégale.

Quoi qu'il en soit, vous devez suivre la suggestion de Sven et utiliser des charges à la place.


1 commentaires

Je l'ai corrigé. Mais je ne peux toujours pas parcourir comme je m'attends. Je vais mettre à jour ma question



3
votes

La signature de JSondecoder est xxx

et n'accepte pas la chaîne JSON dans le constructur. Regardez sa méthode de décodage ().

http: // docs.python.org/library/json.html#json.jsondecoder


0 commentaires

12
votes

Vous semblez avoir besoin d'aide itération de l'objet retourné, ainsi que de décoder le JSON.

import json

#jstr = "... that thing above ..."
# This line only decodes the JSON into a structure in memory:
obj = json.loads(jstr)
# obj, in this case, is a dictionary, a built-in Python type.

# These lines just iterate over that structure.
for ka, va in obj.iteritems():
    print ka
    for kb, vb in va.iteritems():
        print '  ' + kb
        for key, string in vb.iteritems():
            print '    ' + repr((key, string))


3 commentaires

@ Blairg23 Que feriez-vous plutôt pour traiter JSON d'un format connu?


@Jeremy Si vous connaissez la structure de données, faites simplement référence aux clés pour obtenir les valeurs. Dans cet exemple, il utilise une triple imbriquée pour une boucle quand il pourrait simplement dire quelque chose comme: slate_id_type = obj ['ardoise'] ['ID'] ['Type'] . Puisque nous supposons qu'il utilise ces valeurs pour quelque chose, pourrait aussi bien les déclarer là. Beaucoup mieux d'être explicite de toute façon.


@Jeremy absolument! BTW, n'oubliez pas de mettre Essayez , sauf bloque pour attraper toute valeur clé possible n'ayant pas présent. Découvrez docs.python.org/3.6/Library/Exception.html ( Changez-vous à 2.7 si vous utilisez cela) pour plus d'options pour les exceptions.



2
votes

Cela a bien fonctionné pour moi et l'impression est plus simple que de boucler explicitement à travers l'objet comme dans Réponse de Thanatos :

import json
from pprint import pprint

jstr = #### my json code above #### 
obj = json.loads(jstr)

pprint(obj)


0 commentaires