¿Cómo accedo a estos extraños elementos JSON con jQuery? [duplicar]

Posible duplicado:
Seleccionar un objeto JSON con dos puntos en la clave

Pido disculpas si esta es una pregunta duplicada. ¡Busqué, de verdad lo hice!

Lo que estoy tratando de lograr es un simple cambio de formato de fecha en algo más agradable como "Viernes 9 de marzo de 2012". Me ENCANTARÍA usar uno de los muchos complementos jQuery convenientes para analizar el valor "pubDate" disponible en algo más útil. Desafortunadamente, hay fuerzas que me impiden importar otros scripts, incluida la interfaz de usuario de jQuery. La plantilla de página ordenada por mis superiores importa jQuery y eso es todo.

Mis datos JSON contienen el siguiente fragmento:

"items": [
            {
                "title": "blah blah", 
                "link": "http://url.blah.com", 
                "category": "category blah", 
                "pubDate": "Fri, 09 Mar 2012 16:16:05 -0500", 
                "y:published": {
                    "hour": "21", 
                    "timezone": "UTC", 
                    "second": "5", 
                    "month": "3", 
                    "month_name": "March", 
                    "minute": "16", 
                    "utime": "1331327765", 
                    "day": "9", 
                    "day_ordinal_suffix": "th", 
                    "day_of_week": "5", 
                    "day_name": "Friday", 
                    "year": "2012"
                }, 
                "y:id": {
                    "permalink": "true", 
                    "value": null
                }, 
                "y:title": "blah blah", 
                "description": "more blah blah"
            }

Si estoy recorriendo "elementos" usando $ .each, ¿cómo recupero los valores de las cosas en "y: Published"?

Obviamente algo como

items.y:published.day_name

no funciona debido al colon. Por desgracia, no soy el creador de este contenido (en realidad es el feed JSON de Yahoo Pipe, lo que probablemente explicaría la "y:"); Simplemente tengo la tarea de manipularlo. Por lo que he leído, las entradas "y: blahblah" son JSON no estándar (?) Y probablemente no se analizan a través de .getJSON, en cuyo caso estoy jodido. (Subpregunta: ¿es correcta esta evaluación?)

(Y cubro todas mis bases aquí: cambiar la salida de Yahoo Pipe de JSON a RSS / XML elimina el nodo "y: Published" por completo, por lo que esa no es una opción).

Gracias por adelantado. No tengo orgullo; Agradecería incluso la solución más simple y sorprendente, siempre que se pueda hacer con js o jQuery.

ACTUALIZACIÓN: ¡Respondido en tiempo récord! Gracias a todos los que contribuyeron.

La solución:

var niceDate =
singleItem['y:published'].day_name + ', ' +
singleItem['y:published'].month_name + ' ' +
singleItem['y:published'].day + ', ' +
singleItem['y:published'].year;

preguntado el 10 de marzo de 12 a las 07:03

¡DULCE DE AZÚCAR! No. NO había visto eso. Muchas gracias. actualmente golpeando mi frente -

Gracias dobles. De hecho, HE usado ese tipo de notación antes en la manipulación DOM. Supongo que de alguna manera me había convencido de que el recorrido JSON tenía un conjunto de reglas inherentemente diferente. O algo. No sé por qué. Ya es tarde... -

@PaulD: Una vez que lo haya deserializado, ya no tendrá que lidiar con JSON en absoluto. Estás tratando con objetos JavaScript. -

Gracias TJ. Ojalá hubiera tenido la claridad mental para darme cuenta de eso en primer lugar. Como dije, estoy familiarizado con la notación entre corchetes y la he usado antes en cosas DOM corrientes. Me di la vuelta pensando que el recorrido JSON era de alguna manera diferente. Pero tienes razón, por supuesto; cualquier cosa, desde los nodos DOM hasta XML y JSON, se manipula de la misma manera una vez que se ha analizado. @achusonline fue el primero, pero su respuesta a continuación fue la más completa y, por lo tanto, la he marcado como "aceptada". -

2 Respuestas

object["prop"] es equivalente a object.prop, excepto que el primero no está restringido a identificadores JavaScript válidos. (Todos los nombres de propiedad en JavaScript son realmente cadenas internamente. La última forma es por conveniencia, pero como se señaló, no siempre funciona).

Feliz codificación.

respondido 10 mar '12, 07:03

items es una matriz, por lo que para obtener el primer elemento, usa items[0].

Luego, para acceder a las propiedades de ese elemento que tienen nombres de identificadores no válidos, puede usar la notación entre corchetes, por lo que:

console.log(items[0]["y:published"].hour); // 21

En JavaScript, puede acceder a las propiedades del objeto de dos formas: con notación con puntos y un literal (p. Ej., foo.bar), o con notación entre corchetes y una cadena (foo["bar"]). Los dos son completamente intercambiables, pero con la forma de cadena, el nombre de la propiedad no tiene que ajustarse a las reglas para los identificadores literales de JavaScript.

respondido 10 mar '12, 07:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.