Παράδειγμα Εξαίρεσης με JSON σε JavaScript
Ας υποθέσουμε ότι από κάπου από τον εξωτερικό κόσμο μας έρχεται ένα JSON με ένα προϊόν:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
Γνωρίζετε ήδη ότι η μέθοδος JSON.parse θα
ρίξει μια εξαίρεση, εάν το JSON είναι εσφαλμένο.
Ας πιάσουμε αυτήν την εξαίρεση:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// αντιδράμε με κάποιο τρόπο στην εξαίρεση
}
Ωστόσο, μπορεί να συμβεί ότι το ίδιο το JSON είναι σωστό, αλλά δεν περιέχει τα απαιτούμενα πεδία για εμάς, για παράδειγμα, δεν υπάρχει πεδίο για την τιμή:
let json = '{"product": "apple", "amount": 5}'; // δεν υπάρχει τιμή
Ας πούμε ότι αυτή είναι επίσης μια εξαιρετική κατάσταση και σε τέτοια περίπτωση θα ρίχνουμε μια δική μας προσαρμοσμένη εξαίρεση:
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: 'απουσιάζει η τιμή ή η ποσότητα του προϊόντος'
};
}
} catch (error) {
// αντιδράμε με κάποιο τρόπο στην εξαίρεση
}
Τώρα το block catch θα λαμβάνει δύο τύπους
εξαιρέσεων: είτε το JSON είναι εντελώς εσφαλμένο,
και τότε θα υπάρχει εξαίρεση τύπου SyntaxError,
είτε το JSON είναι σωστό, αλλά δεν περιέχει τα απαιτούμενα
για εμάς πεδία, και τότε θα υπάρχει εξαίρεση τύπου
ProductCostError.
Ας πιάσουμε αυτούς τους τύπους εξαιρέσεων
στο block catch:
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: 'απουσιάζει η τιμή ή η ποσότητα του προϊόντος'
};
}
} catch (error) {
if (error.name == 'SyntaxError') {
alert('Εσφαλμένο JSON προϊόντος');
} else if (error.name == 'ProductCostError') {
alert('Από το προϊόν απουσιάζει η τιμή ή η ποσότητα');
}
}
Ας υποθέσουμε ότι σας έρχεται ένα JSON της ακόλουθης μορφής:
let json = `[
{
"name": "user1",
"age": 25,
"salary": 1000
},
{
"name": "user2",
"age": 26,
"salary": 2000
},
{
"name": "user3",
"age": 27,
"salary": 3000
}
]`;
Ελέγξτε αυτό το JSON για γενική ορθότητα κατά την ανάλυση, και μετά την ανάλυση ελέγξτε ότι στο αποτέλεσμα προκύπτει ένας πίνακας, και όχι κάτι άλλο. Εάν στο αποτέλεσμα προκύπτει κάτι άλλο από πίνακα - ρίξτε μια εξαίρεση.