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 :

Parse JSON REGEX


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Apprenti ingenieur administrateur systèmes
    Inscrit en
    Octobre 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingenieur administrateur systèmes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 67
    Par défaut Parse JSON REGEX
    Bonjour,

    Je me trouve confronté à un problème que je n'arrive pas à solutionner :

    je récupère un JSON du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"idIntegration":"int_160684","nom":"""EOVUR"""}
    le problème est que les utilisateurs mettent des doubles quotes sur certains nom comme :"""EOVUR""". Du coup je me retrouve avec un JSON mal formé, et je ne peux pas récupérer les valeurs en faisant : data.nom.

    Existe t-il un regex qui permets de substituer les """ par simplement un ", ainsi que "" par ". Car oui les utilisateurs pour certaines raisons sont amenés a utiliser ce format """ ou "" dans le nom.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    sur ton string avant le parse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jsonstring.replace(/""/,'"')
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 982
    Par défaut
    ... le problème est que les utilisateurs mettent des doubles quotes ...
    Non, le problème est qu'il n'y a pas de vérification de ce qu'entrent les utilisateurs.

    D'une manière générale quand une chaîne JSON est mal formée, tu ne peux rien faire à part signaler le problème à celui qui l'a produit afin qu'il rectifie le tir.

    Faire des remplacements naïfs est une entreprise plutôt hasardeuse et rien ne te dit que ça n'aggravera pas les choses. Par exemple si j'essaie de remplacer l'échappement par répétition d'un quote par un échappement avec un backslash:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let s=`{
        "a": [
            {"name":"to""to", "value":""},
            {"name":"titi", "value":""}
        ]
    }`;
     
    console.log(s.replace(/""/g, '\\"'));
    // {
    //     "a": [
    //         {"name":"to\"to", "value":\"},
    //         {"name":"titi", "value":\"}
    //     ]
    // }
    Ça fonctionne pour une partie de la chaîne mais ça en déglingue une autre!

    Alors après tu peux t'amuser à faire des patterns plus élaborées, avec plus de vérifications, mais à mon avis c'est peine perdue: parce qu'il n'y aucun moyen sûr.

  4. #4
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    sur ton string avant le parse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jsonstring.replace(/""/,'"')
    heu...
    ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      let zo=`{"idIntegration":"int_160684","nom":"""EOVUR"""}`;
      let yo = zo.replace(/"""/g,'"');
    console.log(yo);
    mais sinon, je suis plutôt de l'avis de CosmoKnacki il faut faire les vérif en amont, au moment de la saise.
    en cherchant un peu on doit facilement trouver sur Github du code pour valider un contenu JSON, il y a même des outils en ligne qui le font..

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    @Psy en effet curieusement /""/ ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var chainerecue='{"idIntegration":"int_160684","nom":"""EOVUR"""}';
    chainerecue=chainerecue.replace(/\"+/g,'"');
    console.log(chainerecue);
    json=JSON.parse(chainerecue);
    console.log(json)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var chainerecue='{"idIntegration":"int_160684","nom":"""EOVUR"""}';
    chainerecue=chainerecue.replace(/["]+/g,'"');
    console.log(chainerecue);
    json=JSON.parse(chainerecue);
    console.log(json)
    [Edit]
    ha j'avais pas vu qu'il y en avait 3 ... je n'en avais vu que deux ...
    Du coup pas besoin d'échapper ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var chainerecue='{"idIntegration":"int_160684","nom":"""EOVUR"""}';
    chainerecue=chainerecue.replace(/"+/g,'"');
    console.log(chainerecue);
    json=JSON.parse(chainerecue);
    console.log(json)
    Voire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chainerecue=chainerecue.replace(/""+/g,'"');
    Voire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chainerecue=chainerecue.replace(/"{2,}/g,'"');
    Qui sont plus proches de la réalité de l'opération effectuée et sans doute plus rapides car effectuant moins de remplacements.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 16
    Par défaut
    Bonjour,

    J'ai peur de me tromper, mais on ne sait jamais.

    Si tu récupère les données directement de l'utilisateur, alors je vois pas le problème.

    Par contre si ton JSON est déjà existant, le mieux est de vérifier la string et de la reconstruire sous forme de variable tableau, puis de faire JSON.stringify, si tu n'a rien compris c'est normal.

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>test</title>
    </head>
    <body>
      <textarea name="text" rows="8" cols="80">
        """"""""""""""
      </textarea>
    </body>
    <script>
      let data={};
      data["1"]=document.querySelector('textarea[name="text"]').innerHTML;
      console.log(JSON.stringify(data));
      //log : {"1":"    \"\"\"\"\"\"\"\"\"\"\"\"\"\"\n  "}
    </script>
    </html>

    PS : Je pense qu’un peu plus d’explications du contexte serais les bienvenus.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/11/2011, 01h55
  2. Eviter le blocage du navigateur par une regex
    Par renkev dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/08/2011, 18h14
  3. récupérer le contenu détecter par une regex
    Par manu f dans le forum Général Java
    Réponses: 3
    Dernier message: 07/04/2010, 11h55
  4. [RegEx] Ensemble de Vecteurs à récupérer par une Regex
    Par Iori Yagami dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2009, 15h24
  5. Réponses: 2
    Dernier message: 07/08/2007, 12h01

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