Intento obtener algunos datos json de mi api, pero me enfrenté a este problema:
Codifique javascript para obtener datos json de mi API:
// Get Specs $.getJSON('https://my_api' , function(specs) { console.log(specs); $.each(specs, function(index, vsp) { console.log(vsp); var in = vsp.specs[0].value; var ch = vsp.specs[1].value; var ra = vsp.specs[2].value; var ca = vsp.specs[3].value; var ba = vsp.specs[4].value;Datos JSON Ejemplo: 1:
"specs": [ { "value": "info1" }, { "value": "info2" }, { "value": "info3" }, { "value": "infp4" }, { "value": "info5" } ]Datos JSON Ejemplo: 2:
"specs": [ { "value": "info1" }, { "value": "info2" }, { "value": "info3" }, { "value": "infp4" } ]Para el primer ejemplo, todo funciona bien, pero para el segundo ejemplo tengo este problema:
Cannot read properties of undefined (reading 'value') var ba = vsp.specs[4].value; ==> value is undefined¿Cómo puedo omitir esta var si no está definida? Cualquier ayuda se lo agradecería.
solo puedes insertar un ? entre el nombre de la propiedad y el período entre la siguiente propiedad.
var ba = vsp?.specs?.[4]?.value;también puede usar el operador coalescente nulo:
Puede utilizar el operador de encadenamiento opcional ( ?. ).
Según MDN :
El operador de encadenamiento opcional (
?.) le permite leer el valor de una propiedad ubicada en lo profundo de una cadena de objetos conectados sin tener que verificar que cada referencia en la cadena sea válida.
Este operador puede ser útil en su caso de uso.
Para usarlo, simplemente use el código a continuación.
var ba = vsp.specs[4]?.value; Esto, en lugar de arrojar un error si no puede encontrar la propiedad de value , devolverá undefined .
Esto debería ayudar con el error. Sin embargo, aún debe agregar una verificación si la variable no está undefined . Puedes usar algo como a continuación.
ba = ba ?? "Fallback"; Esto usará el valor del lado izquierdo ( ba ) a menos que sea null o undefined , en cuyo caso usará el valor del lado derecho ( "Fallback" ).
Una declaración if puede hacer algo similar.
if (typeof ba === "undefined" || ba === null) { ba = "Fallback"; } ¡La razón por la que no puedes usar ! es porque evaluará cualquier cosa con un valor falso como false . Esto solo retrocederá si no está undefined o es null .
en el json2 es imposible obtener vsp.specs[4] porque solo tiene posiciones de 0 a 3 en la matriz, podría preguntar si la posición en la matriz existe algo así como
var ba = (4<vsp.length) ? vsp.specs[4].value:null;o
var ba = vsp?.specs?.[4]?.value;