8 votes

Valider JSON à partir de Mongo ?

Je veux vérifier si le texte qu'un utilisateur saisit est un JSON valide. Je sais que je peux facilement le faire en utilisant quelque chose comme ceci :

function IsJsonString(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}

Mon problème est avec le JSON qui vient de Mongo, qui est enveloppé dans le ObjectId , ISODate c'est-à-dire :

{
    "_id" : ObjectId("5733b42c66beadec3cbcb9a4"),
    "date" : ISODate("2016-05-11T22:37:32.341Z"),
    "name" : "KJ"
}

Ce n'est pas un JSON valide. Comment pourrais-je valider le JSON tout en autorisant quelque chose comme ce qui précède ?

2voto

Aprillion Points 4141

Vous pourriez remplacer les appels de fonctions nus par des chaînes de caractères, quelque chose comme ceci

function IsJsonLikeString(str) {
  str = str.replace(/(\w+)\("([^"]+)"\)/g, '"$1(\"$2\")"');
  try {
    JSON.parse(str);
  } ...

explication de https://regex101.com/r/fW7iH4/#javascript :

/(\w+)\("([^"]+)"\)/g
    1st Capturing group (\w+)
        \w+ match any word character [a-zA-Z0-9_]
            Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
    \( matches the character ( literally
    " matches the characters " literally
    2nd Capturing group ([^"]+)
        [^"]+ match a single character not present in the list below
            Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
            " a single character in the list " literally (case sensitive)
    " matches the characters " literally
    \) matches the character ) literally
    g modifier: global. All matches (don't return on first match)

0voto

prasoc Points 143

Le problème que vous rencontrerez n'est pas celui de la validation du JSON, mais celui de savoir si la base de données ACCEPTE réellement les données d'entrée. Vous avez la bonne idée de vérifier si la syntaxe est correcte, mais vous devez ensuite faire passer les données dans la collection mongo et vérifier s'il y a des erreurs.

Vérifiez MongoDB db.collection.explain() pour vérifier si c'est une requête valide de Mongo

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X