Eksempel på undtagelse med JSON i JavaScript
Lad os sige, at der fra den omkringliggende verden kommer et JSON-objekt med et produkt:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Du ved allerede, at metoden JSON.parse vil
kaste en undtagelse, hvis JSON'en er ugyldig.
Lad os fange denne undtagelse:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// reagér på en eller anden måde på undtagelsen
}
Det kan dog være, at JSON'en i sig selv er korrekt, men ikke indeholder de felter, vi har brug for, for eksempel mangler der et felt med prisen:
let json = '{"product": "apple", "amount": 5}'; // ingen pris
Lad os sige, at dette også er en undtagelsessituation, og i sådanne tilfælde vil vi kaste vores egen brugerdefinerede undtagelse:
try {
let json = '{"product": "apple", "amount": 5}';
let product = JSON.parse(json);
if (product.price !== undefined && product.amount !== undefined) {
alert(product.price * product.amount);
} else {
throw {
name: 'ProductCostError',
message: 'manglende pris eller mængde for produktet'
};
}
} catch (error) {
// reagér på en eller anden måde på undtagelsen
}
Nu vil catch-blokken modtage to typer
undtagelser: enten er JSON'en helt ugyldig,
og så vil der være en undtagelse af typen SyntaxError,
eller JSON'en er korrekt, men indeholder ikke de nødvendige
felter, og så vil der være en undtagelse af typen
ProductCostError.
Lad os i catch-blokken fange disse
undtagelsestyper:
try {
let json = '{"product": "apple", "amount": 5}';
let product = JSON.parse(json);
if (product.price !== undefined && product.amount !== undefined) {
alert(product.price * product.amount);
} else {
throw {
name: 'ProductCostError',
message: 'manglende pris eller mængde for produktet'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Ugyldig JSON for produkt');
} else if (error.name == 'ProductCostError') {
alert('Produktet mangler pris eller mængde');
}
}
Lad os sige, at du modtager et JSON-objekt af følgende type:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Valider dette JSON-objekt for generel korrekthed under parsing, og efter parsing skal du kontrollere, at resultatet er et array, og ikke noget andet. Hvis resultatet ikke er et array - skal du kaste en undtagelse.