Exemplu de excepție cu JSON în JavaScript

Să presupunem că de undeva din lumea exterioară vine un JSON cu un produs:

javascriptlet json = '{"product": "apple", "price": 1000, "amount": 5}';
let product = JSON.parse(json);
alert(product.price * product.amount);

Știți deja că metoda JSON.parse va arunca o excepție dacă JSON-ul este incorect. Să prindem această excepție:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // reacționăm cumva la excepție
}

Cu toate acestea, se poate întâmpla ca JSON-ul în sine să fie corect, dar să nu conțină câmpurile de care avem nevoie, de exemplu, nu există câmp pentru preț:

javascriptlet json = '{"product": "apple", "amount": 5}'; // nu există preț

Să considerăm că și aceasta este o situație excepțională și în acest caz vom arunca o excepție personalizată:

javascripttry {
  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: 'lipsește prețul sau cantitatea pentru produs'
    };
  }
} catch (error) {
  // reacționăm cumva la excepție
}

Acum blocul catch va primi două tipuri de excepții: fie JSON-ul este în general incorect, și atunci va fi o excepție de tipul SyntaxError, fie JSON-ul este corect, dar nu conține câmpurile de care avem nevoie, și atunci va fi o excepție de tipul ProductCostError.

Să prindem aceste tipuri de excepții în blocul catch:

javascripttry {
  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: 'lipsește prețul sau cantitatea pentru produs'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('JSON produs incorect');
  } else if (error.name == 'ProductCostError') {
    alert('Produsului îi lipsește prețul sau cantitatea');
  }
}
Задание 1

Să presupunem că la tine vine un JSON de următoarea formă:

javascriptlet json = `[
  {
    "name": "user1",
    "age": 25,
    "salary": 1000
  },
  {
    "name": "user2",
    "age": 26,
    "salary": 2000
  },
  {
    "name": "user3",
    "age": 27,
    "salary": 3000
  }
]`;

Verificați acest JSON pentru corectitudinea generală la parsare, iar după parsare verificați că rezultatul este un array, și nu altceva. Dacă rezultatul nu este un array - aruncați o excepție.