Überprüfen Sie, ob ein String ein gültiger JSON-String in JavaScript ist
- Unterschied zwischen JSON- und Javascript-Objekten
- Überprüfen Sie die Gültigkeit des JSON-Strings in JavaScript
In diesem Artikel erfahren Sie, wie Sie überprüfen können, ob ein bestimmter String ein gültiger JSON- oder JavaScript-Object-Notation-String ist, ohne try...catch
in JavaScript zu verwenden. Beginnen wir mit der Definition der JSON-Zeichenfolge und wie sie uns hilft, unseren Arbeitsablauf zu vereinfachen.
JSON ist ein sprachunabhängiges Textformat zur Strukturierung von Daten, das XML sehr ähnlich ist; Es kann aus Strings, Zahlen int, Float usw., Boolean, Array oder Java-Objekten (Schlüssel-Wert-Paar) bestehen, die in geschweiften Klammern eingeschlossen sind
Unterschied zwischen JSON- und Javascript-Objekten
So sieht das Objekt in JavaScript aus:
object = {
name: 'Haseeb',
age: 31,
city: 'New York',
male: true
}
Wenn dieses Objekt im JSON-Format gespeichert wird, sieht es so aus:
{"name":" Haseeb ", "age":31, "city":"New York", "male":true}
Wenn wir das Objekt aus der Textdatei zurückholen, wird es in das JSON-String-Format konvertiert:
{ 'name': ' Haseeb ', 'age': 31, 'city': 'New York', 'male': true }
Wir können sehen, wie das JSON-Format für Menschen lesbar und für Sprachen einfacher zu manipulieren ist.
Es hat verschiedene andere Vorteile; Abgesehen davon, dass JSON einfach zu lesen und zu schreiben ist, kann es in alle Sprachen integriert werden, und das Parsen kann jetzt aufgrund seiner detaillierten Struktur bequem verwendet werden.
JSON wird häufig für Anwendungsprogrammierschnittstellen (APIs) verwendet, da es hauptsächlich zum Übertragen von Daten von und zu einem Server zu einer Web- oder Mobilanwendung und umgekehrt verwendet wird.
Durch die Verwendung der Parse-Funktion von JSON können wir jetzt Objekte aus JSON-Strings erstellen, hier ist ein Beispiel dafür, wie es gemacht wird:
string = '{"name":"John", "age":31, "city":"New York", "male":true}';
object = JSON.parse(string);
console.log(object);
Ausgabe:
{
name: 'John',
age: 31,
city: 'New York',
male: true
}
Wie erwartet schneidet die Parse-Funktion alles auf den Schlüssel und den Wert des Objekts (JSON-Objekt) ab, weshalb der JSON-String jetzt zu einer Konvention geworden ist, um Daten zwischen Systemen hin und her zu übertragen.
Überprüfen Sie die Gültigkeit des JSON-Strings in JavaScript
try...catch
wird verwendet, um potenzielle Fehler zu behandeln, die in der angegebenen JSON-Zeichenfolge auftreten können, ohne die Ausführung des Programms anzuhalten. Die Zeichenfolge könnte eine fehlerhafte Syntax, fehlende Parameter oder vielleicht ein falsches Teilungsargument haben.
So können wir mit try...catch
die Gültigkeit eines JSON-Strings prüfen:
try {
object = JSON.parse(json);
} catch (error) {
is_json = false;
console.log('Invalid JSON string');
}
Lassen Sie uns versuchen, unserem Code diese Zeichenfolge zu geben:
json = '{"name":"John","city""New York"}';
Ausgabe:
Invalid JSON string
Wie wir beobachten können, sagt uns unser try...catch
nicht, was mit der Saite nicht stimmt. Es sagt uns einfach, dass es ein Problem gibt.
Um einen Einblick zu bekommen, was im JSON-String falsch ist, können wir uns unserer maßgeschneiderten Funktion zuwenden, die, wenn nicht alle, einige Fehler erkennt, die in einem String ohne die Verwendung von try...catch
auftauchen.
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;
};
Lassen Sie uns die beiden JSON-Strings verwenden und ihre Fehler finden.
json = ' {"name":"John","city""New York"} ';
json2 = ' {"name":"John","city":"New York" ';
Ausgabe:
comma or colon are not balanced
false
Brackets {}
are not balanced
false
Dieser Code ist schwach, da er für einige falsche Fälle wahr ist, also finden wir einen hybriden Ansatz, um sowohl die obere Funktion als auch den Code try...catch
zusammenzuführen, um mit etwas Debugging eine absolute Antwort zu erhalten.
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} ';
Ausgabe:
might be a problem in key or value's data type
false
Dieser Funktion wird die gleiche Debugging-Ebene wie der vorherigen Funktion gegeben, aber die Antwort wird dieses Mal absolut sein.