⊗jsSpExcJSE 149 of 294 menu

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.

swbnruhunl