ตัวอย่างการขว้าง Exception ด้วย JSON ใน JavaScript
สมมติว่า JSON กับสินค้ามาถึงเราจากที่ไหนสักแห่งในโลกภายนอก:
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
คุณทราบดีอยู่แล้วว่าเมธอด JSON.parse จะ
ขว้าง Exception ถ้า JSON ไม่ถูกต้อง
ลองจับ Exception นี้ดู:
try {
let json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);
} catch (error) {
// ตอบสนองต่อ Exception แบบใดแบบหนึ่ง
}
อย่างไรก็ตาม อาจเป็นไปได้ว่า JSON นั้น ถูกต้องในตัวของมันเอง แต่ไม่มีฟิลด์ที่เราต้องการ ตัวอย่างเช่น ไม่มีฟิลด์ราคา:
let json = '{"product": "apple", "amount": 5}'; // ไม่มีราคา
สมมติว่านี่ก็เป็นสถานการณ์พิเศษเช่นกัน และในกรณีเช่นนี้เราจะขว้าง Exception ที่ผู้ใช้กำหนดเองของเรา:
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) {
// ตอบสนองต่อ Exception แบบใดแบบหนึ่ง
}
ตอนนี้บล็อก catch จะได้รับ Exception สองประเภท
คือ: ถ้า JSON ไม่ถูกต้องโดยสิ้นเชิง,
แล้วก็จะได้ Exception ประเภท SyntaxError,
หรือถ้า JSON ถูกต้อง แต่ไม่มีฟิลด์
ที่เราต้องการ แล้วก็จะได้ Exception ประเภท
ProductCostError
ลองในบล็อก catch จับประเภท Exception เหล่านี้
ดู:
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 นี้ว่าถูกต้องโดยรวมหรือไม่ ในการแยกวิเคราะห์ และหลังจากการแยกวิเคราะห์ ให้ตรวจสอบว่า ผลลัพธ์ที่ได้เป็นอาร์เรย์ ไม่ใช่สิ่งอื่น ถ้าผลลัพธ์ที่ได้ไม่ใช่อาร์เรย์ - ให้ขว้าง Exception