IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Je n'arrive pas à parcourir le JSON


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut Je n'arrive pas à parcourir le JSON
    Bonjour,

    J'ai suivi le tutoriel, pour parcourir un fichier JSON simple ça marche bien, mais je souhaite parcourir un autre fichier et là j'ai des erreurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # Mon programme en Python
    ## 1) Ouverture fichier JSON
    fichier_json = open('Wiktionnaire_francais_FINAL/json_noms/donnees_anglais_1.json', 'r') # Attention c'est dans le répertoire Python ! 
     
    #2) Lire le JSON sous Python
    import json
    with fichier_json as fichier:
    	data = json.load(fichier)
    	print(data["cmcontinue"])
    Sachant que mon fichier JSON est sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    {"batchcomplete":"","continue":{"cmcontinue":"page|41424f5244455552|137363","continue":"-||extracts"},"query":
    {"categorymembers":[{"ns":100,"title":"Annexe:Substantifs en français"},
    {"ns":0,"title":"0-day"},{"ns":0,"title":"06"},
    {"ns":0,"title":"1,2-dichloropropane"},
    {"ns":0,"title":"1,3-dichloropropène"},
    {"ns":0,"title":"1-alpha,2-alpha,3-bêta,4-alpha,5-alpha,6-bêta-hexachlorocyclohexane"},{.......
    Les erreurs :

    Traceback (most recent call last):
    File "<pyshell#144>", line 2, in <module>
    data = json.load(fichier)
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 268, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 342, in decode
    raise JSONDecodeError("Extra data", s, end)
    json.decoder.JSONDecodeError: Extra data: line 1 column 14010 (char 14009)



    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Il faut que vous regardiez dans le fichier pour savoir pourquoi json.load râle.
    Le fait est que cette bibliothèque ne sait pas décoder une suite d'objets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> import json
    >>> json.loads('{}')
    {}
    >>> json.loads('{}{}')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\py_env\py34-64\lib\json\__init__.py", line 318, in loads
        return _default_decoder.decode(s)
      File "C:\py_env\py34-64\lib\json\decoder.py", line 346, in decode
        raise ValueError(errmsg("Extra data", s, end, len(s)))
    ValueError: Extra data: line 1 column 3 - line 1 column 5 (char 2 - 4)
    >>>
    alors que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> json.loads('[{},{}]')
    [{}, {}]
    >>>
    '[{},{}]' est un seul objet composé de... alors que '{}{}' est la concaténation de 2 objets.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut
    Merci pour votre réponse.
    Le fichier JSON est un peu complexe, il a cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { {...},  { [.............] } }, { {...},  { [.............] } }
    si j'utilise json.loads j'ai également une erreur.
    Est-ce que je peux lire u json avec cette forme ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    S'il est de cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { {...},  { [.............] } }, { {...},  { [.............] } }
    alors il ressemble plutôt à:
    vous pourriez voir ce que çà donne en ajoutant un '[' au début et un ']' à la fin.
    Mais c'est du bricolage... les options sont:
    - générer un fichier plus propre,
    - séparer les "records" JSON avant de les soumettre à json.load

    W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 388
    Par défaut
    J'ai ajouté des crochets, ça m'a donné un autre liste d'erreurs :
    Traceback (most recent call last):
    File "C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\mon_programme_v0_ouverture_fichier.py", line 8, in <module>
    data = json.load(fichier)
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 268, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
    json.decoder.JSONDecodeError: Expecting ',' delimiter: line 2 column 14010 (char 14011)



    Comment je peux nettoyer le JSON. C'est un grand fichier ?
    En fait, j'ai obtenu ce fichier à partir d'une API qui donne justement le format JSON, pourquoi n'est-il pas bon ?

    Merci

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par geeka Voir le message
    Comment je peux nettoyer le JSON. C'est un grand fichier ?
    En fait, j'ai obtenu ce fichier à partir d'une API qui donne justement le format JSON, pourquoi n'est-il pas bon ?
    Pour l'instant, la seule chose que vous savez c'est que çà génère des trucs (une "suite d'objets json") de la forme "{} {}" et non "{}, {}" comme vous le mentionniez dans votre post précédent
    *et* que la bibliothèque json de Python n'en veut pas (pas plus d'ailleurs que les validateurs json disponibles "on-line" - ce n'est qu'une information, çà ne veut pas dire que ce sont des constructions illicites).

    Est-ce que vous utilisez "correctement" votre API? N'y-a-t-il pas des possibilités pour rendre le JSON produit plus comestible par la bibliothèque Python?

    S'il faut remettre "en forme", il faut déjà s'assurer qu'on ne va rencontrer que la forme "{} {}" et non pas d'autres bizarreries genre: "[{}, {}] {}". A partir de là ce ne sont que des chaînes de caractères, compter les paires de "{", "}" avec une boucle "for" est un exercice que vous avez dans les tutos pour débutants (le faire avec le module re est à peine plus compliqué)... mais, il faut quand même s'assurer de la variabilité des patterns que vous allez devoir "mouliner" ne serait-ce que pour "tester" que çà fait bien ce que vous attendez sur des exemples "simples".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/05/2011, 21h35
  2. Je n'arrive pas à parcourir mon tableau $_POST
    Par beegees dans le forum Langage
    Réponses: 7
    Dernier message: 22/03/2009, 11h59
  3. j'arrive pas à parcourir un resultset avec while
    Par une_tite_question dans le forum JDBC
    Réponses: 11
    Dernier message: 12/06/2008, 16h53
  4. scrollbar qui dans les navigateurs n'arrive pas à faire parcourir toute la page
    Par katlinea dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 30/07/2007, 10h02
  5. j'arrive pas a arreter mon thread d'arriere-plan
    Par ms91fr dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2003, 21h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo