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

JavaScript Discussion :

Incompréhensible Uncaught SyntaxError: JSON.parse: unexpected character


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Par défaut Incompréhensible Uncaught SyntaxError: JSON.parse: unexpected character
    Bonjour,
    je récupère un ensemble de données capteurs (GPS, T°, RH%, etc...) que je mets en forme dans un fichier mesures.json sur disque dur.
    Extrait du fichier avec uniquement latitude et longitude:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"positions":[[{"latitude": 43.27216, "longitude": 5.42601}][{"latitude": 43.27282, "longitude": 5.42606}],[{"latitude": 43.27283, "longitude": 5.42667}]]}
    Dans mon code je veux exploiter le contenu de ce fichier pour faire de l'affichage sur une page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function readFile(input) {
    	let fileReader = new FileReader(); 
    	fileReader.readAsText(file);
     
    	fileReader.onload = function() {
    		//JSON.parse() demande d'encadrer lecontenu du fichier
    		let data = "'" + fileReader.result + "'";
    		console.log(data);
    		let myData = JSON.parse(data);
    		console.log(myData.positions[0][0].latitude);
    		console.log(myData.positions[0][0].longitude);
    	}; 
    }
    Et j'ai donc systématiquement le message d'erreur:
    Uncaught SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
    Le console.log() donne un affichage correct.

    Si j'exploite ces mêmes données mais dans une variable locale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let myData = '{"positions":[[{"latitude": 43.27216,"longitude": 5.42601}],[{"latitude": 43.27282, "longitude": 5.42606}],[{"latitude": 43.27283, "longitude": 5.42667}]]}';
    Ca fonctionne parfaitement...
    J'ai déjà consommé pas mal d'heures là-dessus, si quelqu'un a une idée?
    Merci.
    P.S.: je ne suis pas du tout expert en dev web.

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    {"positions":[[{"latitude": 43.27216, "longitude": 5.42601}][{"latitude": 43.27282, "longitude": 5.42606}],[{"latitude": 43.27283, "longitude": 5.42667}]]}. pas bon
    {"positions":[[{"latitude": 43.27216, "longitude": 5.42601}],[{"latitude": 43.27282, "longitude": 5.42606}],[{"latitude": 43.27283, "longitude": 5.42667}]]} c'est mieux ainsi, il te manque une virgule à la 2éme déclaration
    D'ailleurs dans l'exemple affectation à une avec variable, là la virgule y est bien.

    Pour vérifier la validité d'un JSON: https://jsonlint.com/
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Par défaut
    Bonjour et merci pour ta réponse,
    j'ai corrigé mais l'erreur persiste.
    Uncaught SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
    J'appelle ma fonction comme ça (repris depuis un site dédié au JS):
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <body>
    	<h3 color=red>Relevé de positions</h3>
    	<input onchange="readFile(this)" type="file">
    </body>
    Est-là le pb?
    Est-ce que mon fichier positions.json sur le disque comporte un bug ? --> WinHex ne décèle rien

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    Tu fais un console.log(data); ligne 8 dans la fonction function readFile(input), moi je ferais un copier que je collerais dans le vérificateur https://jsonlint.com/ pour voir ce que cela donne.
    C'est ce que j'ai fait pour te signaler le problème de virgule.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Re

    Essais d'ajouter [ en début, et ] en fin de fileReader.result avant de parser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		//JSON.parse() demande d'encadrer lecontenu du fichier
    		let data = "[" + fileReader.result + "]";
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    Attention
    //JSON.parse() demande d'encadrer lecontenu du fichier
    ton fileReader.result est une chaine donc inutile de l'encadrer.

    Donc avec :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h3 color=red>Relevé de positions</h3>
    <input onchange="readFile(event)" type="file">
    faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function readFile(ev) {
      const files = ev.target.files;
      file = files[0];
      const fileReader = new FileReader();
      fileReader.onload = function() {
        const data = JSON.parse(this.result);
        // pour voir comment se présente l'objet
        console.log(data);
      };
      fileReader.readAsText(file);
    }

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/02/2016, 17h02
  2. Réponses: 1
    Dernier message: 11/12/2015, 12h15
  3. Réponses: 2
    Dernier message: 31/05/2015, 10h46
  4. [AJAX] SyntaxError: JSON.parse: unexpected character
    Par nanousik dans le forum jQuery
    Réponses: 4
    Dernier message: 07/08/2013, 16h49
  5. Réponses: 6
    Dernier message: 06/05/2012, 17h41

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