Ejemplo de excepción con JSON en JavaScript

Supongamos que nos llega de algún lugar del mundo externo un JSON con un producto:

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

Ya sabes que el método JSON.parse lanzará una excepción si el JSON es incorrecto. Aceptemos esta excepción:

javascripttry {
  let json = '{"product": "apple", "price": 1000, "amount": 5}';
  let product = JSON.parse(json);
  alert(product.price * product.amount);
} catch (error) {
  // de alguna manera reaccionamos a la excepción
}

Sin embargo, puede suceder que el propio JSON sea correcto, pero no contenga los campos que necesitamos, por ejemplo, no hay un campo con el precio:

javascriptlet json = '{"product": "apple", "amount": 5}'; // no hay precio

Digamos que esta también es una situación excepcional y en tal caso lanzaremos nuestra propia excepción de usuario:

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: 'falta el precio o la cantidad del producto'
    };
  }
} catch (error) {
  // de alguna manera reaccionamos a la excepción
}

Ahora el bloque catch recibirá dos tipos de excepciones: o el JSON es incorrecto en general, y entonces será una excepción de tipo SyntaxError, o el JSON es correcto, pero no contiene los campos que necesitamos, y entonces será una excepción de tipo ProductCostError.

Aceptemos estos tipos de excepciones en el bloque 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: 'falta el precio o la cantidad del producto'
    };
  }
} catch (error) {
  if (error.name == 'SyntaxError') {
    alert('JSON de producto incorrecto');
  } else if (error.name == 'ProductCostError') {
    alert('Al producto le falta el precio o la cantidad');
  }
}
Задание 1

Supongamos que te llega un JSON de la siguiente forma:

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

Verifica este JSON para una corrección general al analizarlo, y después del análisis verifica que el resultado sea un array, y no otra cosa. Si el resultado no es un array - lanza una excepción.