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

Modules Perl Discussion :

erreur avec le module JSON::Parse


Sujet :

Modules Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut erreur avec le module JSON::Parse
    Bonjour à tous,


    J'utilise le module JSON::Parse et j'obtiens l'erreur : JSON error at line 1, byte 3107978/181299978: Unexpected character 'N' parsing object starting from byte 3107382: expecting whitespace: '\n', '\r', '\t', ' ' or start of string: '"' or digit: '0-9' or minus: '-' or start of an array or object: '{', '[' or start of literal: 't', 'f', 'n' at C:/Perl64/site/lib/JSON/Parse.pm line 92.

    J'ai, au moins, une valeur numérique qui est à 'Nan'. Je ne trouve pas dans la documentation où changer les paramètres afin de permettre qu'une valeur numérique attendue puisse être autre chose. Est-ce possible ?


    D'avance merci,

    Jasmine.
    -- Jasmine --

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 461
    Points
    12 461
    Billets dans le blog
    1
    Par défaut
    Peux-tu déterminer ce que contient ta chaîne JSON à l'endroit de l'erreur?

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Coucou,


    Merci pour ton intérêt à mon problème.

    Mon collègue a utilisé com.fasterxml.jackson, il avait le même problème et en changeant le paramètre « Non-standard token 'NaN': enable JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS » … il a réussi à récupérer les données sans problème. J’aimerais l’équivalent de ce paramètre pour mon module Perl JSON::Parse. Sinon, peut-être utiliser cette libraire Java dans mon code Perl, est-ce possible ?

    Le problème est qu’il manque des double quotes autour de valeurs alpha-numériques et que Perl prend donc cela pour des nombres. J’aimerais éviter la solution de devoir lire, utiliser une expression régulière et réécrire mon fichier.

    Exemple : ["48505294","Demo_study",{…"rawscore":999,"behavior":777,"handedness_score":999.0, "handedness":NaN,"total_score":999 …}]

    L’erreur vient de : "handedness":NaN,


    Merci,

    Jasmine.
    -- Jasmine --

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 461
    Points
    12 461
    Billets dans le blog
    1
    Par défaut
    Je ne pense pas que ce soit du JSON valide, du coup le module ne sait probablement pas parser NaN ("not a number") à un endroit où, précisément, une valeur numérique ou entre guillemets est attendue.

    Je ne crois pas qu'il soit possible de demander au module d'être moins strict dans son interprétation de ce genre de cas, mais je peux me tromper car je ne suis vraiment pas un expert de ce module que je n'ai utilisé que très rarement et pour des cas très simples.

    A part hacker le code du module, je ne vois pas trop de solution autre que celle consistant à prétraiter le JSON pour remplacer NaN par quelque chose d'autre, ou ajouter des guillemets.

  5. #5
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    D'accord, merci.
    -- Jasmine --

  6. #6
    Nouveau membre du Club Avatar de dca_marshall
    Profil pro
    Inscrit en
    juillet 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Bonjour Jasmine80,

    Lolo78 à raison ce n'est pas du JSON valide, la RFC 7159 est très claire la dessus, seules les valeurs numériques (positive ou négative), peuvent ne pas être protégées.

    J'ai pris l'habitude de valider le JSON avant intégration, ici : https://jsonformatter.curiousconcept.com

    Je serai à ta place, je ferai :
    • prendre le JSON comme un fichier texte avec File::Slurp (en ARRAY ou SCALAR selon la taille)
    • passerai une regex pour transformer cette anomalie, sur chaque ligne ou tout le string, avec un truc du style :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      s!(".*?")\s*:(\s*\w(.*)([ ,"])!$1: "$2"$3!g
    • repasserai le résultat au JSON:arse.


    Pas très sûr de la RegEX, mais c'est l'esprit.

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 461
    Points
    12 461
    Billets dans le blog
    1
    Par défaut
    Oui, dca_marshall ++, c'est exactement le genre de choses que j'avais en tête quand je parlais de prétraiter le JSON.

Discussions similaires

  1. Problème de gestion des erreurs avec le module RIO
    Par menina_raquel dans le forum Ruby
    Réponses: 0
    Dernier message: 04/01/2011, 16h30
  2. [Qt Mobility] Erreur de link avec le module Messaging de QtMobility
    Par Monta^^ dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 16/05/2010, 16h51
  3. erreur avec withevents dans un module de classe
    Par patbou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/12/2007, 04h32
  4. [py2exe] erreur avec le module pmw
    Par mythe dans le forum Py2exe
    Réponses: 1
    Dernier message: 24/07/2007, 13h47
  5. Erreur bizarre avec le module DBI
    Par Jim_Nastiq dans le forum SGBD
    Réponses: 7
    Dernier message: 12/04/2006, 17h28

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