Vérifier si une chaîne est une chaîne JSON valide en JavaScript

Tahseen Tauseef 12 octobre 2023
  1. Différence entre les objets JSON et Javascript
  2. Vérifier la validité de la chaîne JSON en JavaScript
Vérifier si une chaîne est une chaîne JSON valide en JavaScript

Cet article vous apprendra comment vérifier si une chaîne donnée est une chaîne JSON ou JavaScript Object Notation valide sans utiliser try...catch en JavaScript. Commençons par la définition de la chaîne JSON et comment elle nous aide à faciliter notre flux de travail.

JSON est un format de texte indépendant du langage utilisé pour structurer des données très similaire à XML ; il peut s’agir de chaînes, de nombres entiers, flottants, etc., d’objets booléens, de tableaux ou Java (paire clé-valeur) entre accolades

Différence entre les objets JSON et Javascript

Voici à quoi ressemble l’objet en JavaScript :

object = {
  name: 'Haseeb',
  age: 31,
  city: 'New York',
  male: true
}

Lorsque cet objet est enregistré au format JSON, il ressemble à ceci :

{"name":" Haseeb ", "age":31, "city":"New York", "male":true}

Lorsque nous récupérons l’objet à partir du fichier texte, il est converti au format de chaîne JSON :

{ 'name': ' Haseeb ', 'age': 31, 'city': 'New York', 'male': true }

Nous pouvons voir à quel point le format JSON est lisible par l’homme et plus facile à manipuler pour les langages.

Il a divers avantages autres que cela; JSON, en plus d’être facile à lire et à écrire, peut s’intégrer à tous les langages, et l’analyse peut désormais être utilisée de manière pratique en raison de sa structure détaillée.

JSON est couramment utilisé pour les interfaces de programmation d’applications (API) car il est principalement utilisé pour transférer des données vers et depuis un serveur vers une application Web ou mobile et vice versa.

En utilisant la fonction d’analyse de JSON, nous pouvons maintenant créer des objets à partir de la chaîne JSON, voici un exemple de la façon dont c’est fait :

string = '{"name":"John", "age":31, "city":"New York", "male":true}';
object = JSON.parse(string);
console.log(object);

Production :

{ 
    name: 'John', 
    age: 31, 
    city: 'New York', 
    male: true 
}

Comme prévu, la fonction d’analyse réduit tout à la clé et à la valeur de l’objet (objet JSON), c’est pourquoi la chaîne JSON est maintenant devenue une convention pour transférer des données vers et depuis entre les systèmes.

Vérifier la validité de la chaîne JSON en JavaScript

try...catch est utilisé pour gérer toute erreur potentielle pouvant apparaître dans la chaîne JSON donnée sans interrompre l’exécution du programme. La chaîne peut avoir une syntaxe erronée, des paramètres manquants ou peut-être un argument de fractionnement incorrect.

Voici comment vérifier la validité d’une chaîne JSON à l’aide de try...catch :

try {
  object = JSON.parse(json);
} catch (error) {
  is_json = false;
  console.log('Invalid JSON string');
}

Essayons de donner à notre code cette chaîne :

json = '{"name":"John","city""New York"}';

Production :

Invalid JSON string

Comme nous pouvons le constater, notre try...catch ne nous dit pas ce qui ne va pas avec la chaîne. Il nous dit simplement qu’il existe un problème.

Pour avoir un aperçu de ce qui ne va pas dans la chaîne JSON, nous pouvons nous tourner vers notre fonction personnalisée qui détecte, sinon toutes, certaines erreurs qui apparaissent dans une chaîne sans utiliser try...catch.

isJSON = function(json) {
  // Nested Count function only to be used for counting colons and commas
  countCharacter =
      function(string, character) {
    count = 0;
    for (var i = 0; i < string.length; i++) {
      if (string.charAt(i) == character) {  // counting : or ,
        count++;
      }
    }
    return count;
  }

  json = json.trim();  // remove whitespace, start and end spaces

  // check starting and ending brackets
  if (json.charAt(0) != '{' || json.charAt(json.length - 1) != '}') {
    console.log('Brackets {} are not balanced')
    return false
  }
  // else this line will check whether commas(,) are one less than colon(:)
  else if (!(countCharacter(json, ':') - 1 == countCharacter(json, ','))) {
    console.log('comma or colon are not balanced');
    return false;

  } else {
    json = json.substring(1, json.length - 1);  // remove first and last
                                                // brackets
    json = json.split(',');  // split string into array, and on each index there
                             // is a key-value pair

    // this line iterate the array of key-value pair and check whether key-value
    // string has colon in between
    for (var i = 0; i < json.length; i++) {
      pairs = json[i];

      if (pairs.indexOf(':') == -1) {  // if colon not exist in b/w

        console.log('No colon b/w key and value');
        return false;
      }
    }
  }
  return true;
};

Utilisons les deux chaînes JSON et trouvons leurs défauts.

json = ' {"name":"John","city""New York"} ';
json2 = ' {"name":"John","city":"New York" ';

Production :

comma or colon are not balanced
false
Brackets {}
are not balanced
false

Ce code est faible car il est vrai pour certains faux cas, nous trouvons donc une approche hybride pour fusionner à la fois la fonction supérieure et le code try...catch pour obtenir une réponse absolue avec un peu de débogage.

isJSON = function(json) {
  is_json = true;  // true at first

  // Try-catch and JSON.parse function is used here.

  try {
    object = JSON.parse(json);
  } catch (error) {
    is_json = false;
    console.log('might be a problem in key or value\'s data type');
  }

  if (!is_json) {
    countCharacter =
        function(string, character) {
      count = 0;
      for (var i = 0; i < string.length; i++) {
        if (string.charAt(i) == character) {  // counting : or ,
          count++;
        }
      }
      return count;
    }

    json = json.trim();  // remove whitespace, start and end spaces

    if (json.charAt(0) != '{' || json.charAt(json.length - 1) != '}') {
      console.log('Brackets {} are not balanced')

    }

    else if (!(countCharacter(json, ':') - 1 == countCharacter(json, ','))) {
      console.log('comma or colon are not balanced');

    } else {
      json =
          json.substring(1, json.length - 1);  // remove first and last brackets
      json = json.split(',');


      for (var i = 0; i < json.length; i++) {
        pairs = json[i];
        if (pairs.indexOf(':') == -1) {  // if colon not exist in b/w
          console.log('No colon b/w key and value');
        }
      }
    }
  }
  return is_json;
};
json = ' {"name":"John", "birth":"1986-12-14", "city":5a0} ';

Production :

might be a problem in key or value's data type
false

Cette fonction reçoit le même niveau de débogage que la fonction précédente, mais la réponse sera absolue cette fois.

Article connexe - JavaScript JSON