Voorbeeld van uitsondering met JSON in JavaScript
Laat ons sê 'n JSON met 'n produk kom van êrens in die buitewêreld af na ons toe:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Jy weet reeds dat die metode JSON.parse 'n uitsondering sal gooi as die JSON ongeldig is.
Kom ons vang hierdie uitsondering:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// reageer op een of ander manier op die uitsondering
}
Daar kan egter wees dat die JSON self geldig is, maar nie die nodige velde bevat nie, byvoorbeeld, daar is geen prysveld nie:
let json = '{"product": "apple", "amount": 5}'; // geen prys nie
Kom ons sê dat dit ook 'n uitsonderlike situasie is en sal in so 'n geval ons eie gebruikersuitsondering gooi:
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: 'prys of hoeveelheid van produk ontbreek'
};
}
} catch (error) {
// reageer op een of ander manier op die uitsondering
}
Nou sal die catch-blok twee tipes uitsonderings ontvang: of die JSON is glad nie geldig nie,
en dan sal daar 'n uitsondering van die tipe SyntaxError wees,
of die JSON is geldig, maar bevat nie die velde wat ons nodig het nie,
en dan sal daar 'n uitsondering van die tipe ProductCostError wees.
Kom ons sal hierdie tipes uitsonderings in die catch-blok vang:
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: 'prys of hoeveelheid van produk ontbreek'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Ongeldige produk JSON');
} else if (error.name == 'ProductCostError') {
alert('Produk het geen prys of hoeveelheid nie');
}
}
Laat ons sê 'n JSON van die volgende vorm kom na jou toe:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Toets hierdie JSON vir algemene geldigheid tydens ontleding, en na ontleding, kontroleer dat die resultaat 'n array is, en nie iets anders nie. As die resultaat nie 'n array is nie - gooi 'n uitsondering.