¿Cómo analizar este JSON en Javascript?
Frecuentes
Visto 208 equipos
0
Buscando un poco de orientación. Estoy siguiendo esta guía para crear mi propia extensión de Google Chrome.
http://www.seomoz.org/blog/building-chrome-apps-and-extensions
Funciona muy bien con sus ejemplos, pero cuando trato de aplicarlo a mis propios datos JSON, no funciona.
Su ejemplo:
var messages = [];
var whens = [];
function checkNotifications(){
$.getJSON('http://dl.dropbox.com/u/31988864/notifications.json',function(data){
var new_messages = [];
var new_whens = [];
$.each(data, function(key, val) {
if (messages.indexOf(val['message']) == -1){
chrome.browserAction.setBadgeText({'text': 'New'});
chrome.browserAction.setBadgeBackgroundColor({'color': '#f00'});
}
new_messages.push(val['message']);
new_whens.push(val['when']);
});
messages = new_messages;
whens = new_whens;
});
}
checkNotifications();
// 1800000 milliseconds is 30 minutes
setInterval(checkNotifications,1800000);
Los datos de muestra notifications.json
parece:
[
{"message": "<b>New blog post</b>: by David Sottimano - <a href='http://www.distilled.net/blog/miscellaneous/proxy-server-essential-information-for-seos/'>Proxy server essential information for SEOs</a>", "when": "6 days ago"},
{"message": "<b>New module released</b>: Further SEO - <a href='http://www.distilled.net/u/linkbait/'>Linkbait that gets links</a>", "when": "11 days ago"},
{"message": "<b>New blog post</b>: by Benjamin Estes - <a href='http://www.distilled.net/blog/web-analytics/segmenting-keywords-using-seotools/'>Segmenting keywords using SeoTools</a>", "when": "14 days ago"},
{"message": "<b>New blog post</b>: by Will Critchlow - <a href='http://www.distilled.net/blog/conversion-rate-optimization/why-your-cro-tests-fail/'>Why your CRO tests fail</a>", "when": "16 days ago"}
]
Muy sencillo. Obtiene los datos de notifications.json
, y esencialmente hace un foreach
en los resultados buscando un nuevo message
etiqueta. Si encuentra uno, establece NUEVO en la insignia de extensión.
Naturalmente quiero cambiar el $.getJSON('http://dl.dropbox.com/u/31988864/notifications.json',
a mi propia fuente RSS, que se hace con un poco de ayuda de Google para convertir a JSON.
Aquí hay una muestra de la salida. Es bastante largo, así que solo estoy proporcionando un fragmento.
{
"responseData":
{
"feed":
{
"feedUrl":"http://feeds.feedburner.com/thegearpost",
"title":"TheGearPost",
"link":"http://thegearpost.com",
"author":"",
"description":"The online gadget, gear and gift guide for men.",
"type":"rss20",
"entries":
[
{
"title":"Man Crates",
"link":"http://feedproxy.google.com/~r/thegearpost/~3/_WO8mJS7dUY/",
"author":"Pat",
"publishedDate":"Fri, 03 May 2013 12:19:10 -0700",
"contentSnippet":"Call in your own care package with Man Crates."
Estoy pensando que puedo reemplazar el código de muestra message
con Google contentSnippet
.
Sin embargo, esto no funciona, y esta es mi pregunta:
¿Cómo haría que esto funcione? He intentado val['responseData.feed.contentSnippet']
, val['feed.contentSnippet']
, e incluso solo val['contentSnippet']
en la siguiente sección, pero nada de eso funciona.
$.each(data, function(key, val) {
if (messages.indexOf(val['responseData.feed.contentSnippet']) == -1){
chrome.browserAction.setBadgeText({'text': 'New'});
chrome.browserAction.setBadgeBackgroundColor({'color': '#f00'});
}
});
En última instancia, me gustaría poder cambiar las palabras NUEVO a un recuento real de no leídos. Pero creo que necesito que las verificaciones de antecedentes funcionen para empezar.
1 Respuestas
0
Lo que necesita iterar es responseData/feed/entries, entonces:
$.each(data.responseData.feed.entries,
function(key, entry) {
var snippet = entry.contentSnippet;
// whatever you need to do
}
);
contestado el 05 de mayo de 13 a las 21:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript json google-chrome-extension or haz tu propia pregunta.
Gracias. Sigue sin funcionar. ¿Cambiaría la declaración if a
if (messages.indexOf(entry['contentSnippet']) == -1){
? - Palmaditaor
(messages.indexOf(entry.contentSnippet) < 0)
- Pablo RoubExtraño. Con los datos de muestra, la insignia de Chrome mostraría NUEVO al actualizar. No obtengo nada, lo que me lleva a creer que todavía no funciona. - Palmadita
Funciona bien para mí CodePen o la consola JS (una vez que deshabilité la seguridad web en Chrome); el mismo codigo tienes funciona bien en una extensión. ¿Estás viendo errores en la consola de Javascript cuando ejecutas tu extensión? - Pablo Roub
Buen punto. No hay errores en la consola. Para ser honesto, no estoy muy versado en JS/JSON, por lo que esperaba que algunos cambios menores en la extensión de muestra lo arreglaran, pero parece que no es el caso. - Palmadita