Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

329
Vistas
¿Cómo puedo acceder a una propiedad de objeto JS cuyo valor es un número entero desconocido?

La respuesta JSON devuelta por esta llamada a la API de wikipedia es una serie de objetos anidados. Para viajar por la cadena de propiedades del objeto y acceder al texto de interés, primero tengo que acceder a una propiedad cuyo valor es un número aleatorio, dependiendo de la página de wikipedia que consulto por título.

Un ejemplo para la página titulada "San%20Francisco" (ID de página = 49728):

Cadena de propiedad de objeto :

 responseJSON.wiki[0].query.pages[<<page id>>].extract

Ejemplo de llamada a la API: https://en.wikipedia.org/w/api.php/?origin=*&format=json&action=query&prop=extracts&exintro=&explaintext=&titles=San%20Francisco

¿Hay alguna forma de identificar la propiedad cuyo valor es un número entero aleatorio? Solo hay un hijo de páginas en la cadena cuyo valor es un número entero. No puedo pensar en otra solución y no conozco ningún método de análisis JSON que sea efectivo.

No tengo experiencia con las solicitudes de AJAX y estoy haciendo mi llamada ajax de esta manera usando jQuery. Me gustaría mencionar esto en caso de que esté haciendo algo ingenuo:

 var getWiki = function (obj) { return $.ajax({ url: "http://en.wikipedia.org/w/api.php" + "?origin=*" + "&format=json" + "&action=query" + "&prop=extracts" + "&exintro=" + "&explaintext=" + "&titles=" + obj.position, method: 'GET' }); };
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si su object tiene solo una clave, puede obtenerla usando Object.keys(object)[0] y luego realizar un acceso de propiedad de notación de paréntesis dinámico en el object original. (Esto es lo que hace la utilidad dig en el siguiente ejemplo).

También tenga en cuenta que puede usar .promise() para hacer que el manejo de su respuesta JSON sea un poco más ordenado. Le sugiero que agregue type: 'json' a su solicitud AJAX también, para que no tenga que analizar los datos de la cadena usted mismo.

 function getWiki(obj) { return $.ajax({ url: "http://en.wikipedia.org/w/api.php" + "?origin=*" + "&format=json" + "&action=query" + "&prop=extracts" + "&exintro=" + "&explaintext=" + "&titles=" + obj.position, method: 'GET', type: 'json' }).promise() } function dig(object) { return object[Object.keys(object)[0]] } getWiki({ position: 'San Francisco' }) .then(function(json) { console.log( dig(json.query.pages).extract //=> 'San Francisco (SF) ...' ) })
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

about 4 years ago · Santiago Trujillo Denunciar

0

Bueno, si siempre hay una sola propiedad en el objeto de las páginas, puede probar cualquiera de los dos métodos:

 if (typeof Object.values !== 'function') { Object.values = obj => Object.keys(obj).map(key => obj[key]); } const responseJSON = { "batchcomplete": "", "query": { "pages": { "49728": { "pageid": 49728, "ns": 0, "title": "San Francisco", "extract": "Some text" } } } } const pages = responseJSON.query.pages; const extractedWithKeys = pages[Object.keys(pages)[0]]; const extractedObjValues = Object.values(pages)[0]; console.log(extractedWithKeys, extractedObjValues)

about 4 years ago · Santiago Trujillo Denunciar

0

De hecho, puede hacer esto sin Object.keys u otros trucos similares si agrega el parámetro indexpageids a la consulta.

Ejemplo de llamada a la API: https://en.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&indexpageids=1&titles=San+Francisco&exintro=1&explaintext=1

Ejemplo de salida JSON:

 { "batchcomplete": "", "query": { "pageids": [ "49728" ], "pages": { "49728": { "pageid": 49728, "ns": 0, "title": "San Francisco", "extract": "San Francisco (initials SF) <snip>" } } } }

Luego puede usar algo como data.query.pages[data.query.pageids[0]].extract para obtener el extracto (aunque tenga en cuenta que a veces es posible que no se devuelvan páginas, según la consulta que use).

El sandbox de la API de Wikipedia es útil para descubrir parámetros como indexpageids : experimentar allí suele ser más rápido que leer los documentos.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda