JSON išimčių pavyzdys JavaScript
Tarkime, iš išorinio pasaulio mums ateina JSON su produktu:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Jūs jau žinote, kad metodas JSON.parse
mes išimtį, jei JSON yra neteisingas.
Pagaukime šią išimtį:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// kažkaip reaguojame į išimtį
}
Tačiau gali būti taip, kad pats JSON yra teisingas, bet jame nėra mums reikalingų laukų, pavyzdžiui, nėra kainos lauko:
let json = '{"product": "apple", "amount": 5}'; // nėra kainos
Sakykime, kad tai taip pat yra išimtinė situacija ir tokiu atveju mes mesime savo vartotojo išimtį:
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: 'trūksta produkto kainos arba kiekio'
};
}
} catch (error) {
// kažkaip reaguojame į išimtį
}
Dabar blokas catch gaus du tipus
išimčių: arba JSON apskritai neteisingas,
ir tada bus SyntaxError tipo išimtis,
arba JSON teisingas, bet jame nėra reikalingų
mums laukų, ir tada bus ProductCostError tipo
išimtis.
Bloke catch sugaukime šiuos
išimčių tipus:
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: 'trūksta produkto kainos arba kiekio'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Netinkamas produkto JSON');
} else if (error.name == 'ProductCostError') {
alert('Produktui trūksta kainos arba kiekio');
}
}
Tarkime, jums ateina JSON tokio pavidalo:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Patikrinkite šio JSON bendrą teisingumą analizuojant, o po analizės patikrinkite, ar rezultate gaunamas masyvas, o ne kažkas kito. Jei rezultate gaunamas ne masyvas - iškirkite išimtį.