WedX - журнал о программировании и компьютерных науках

Как разобрать этот JSON в Javascript?

Ищу небольшое руководство. Я следую этому руководству, чтобы создать собственное расширение для Google Chrome.

https://www.seomoz.org/blog/building-chrome-apps-and-extensions

Он отлично работает с их примерами, но когда я пытаюсь применить его к своим собственным данным JSON, он не работает.

Их пример:

var messages = [];
var whens = [];

function checkNotifications(){
  $.getJSON('https://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);

Пример данных notifications.json выглядит так:

[
    {"message": "<b>New blog post</b>: by David Sottimano - <a href='https://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='https://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='https://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='https://www.distilled.net/blog/conversion-rate-optimization/why-your-cro-tests-fail/'>Why your CRO tests fail</a>", "when": "16 days ago"} 
]

Очень прямолинейно. Он получает данные из notifications.json и, по сути, делает foreach для результатов поиска нового тега message. Если он найдет его, он установит NEW на значке расширения.

Естественно, я хочу изменить $.getJSON('https://dl.dropbox.com/u/31988864/notifications.json', на свой собственный RSS-канал, что делается с небольшой помощью Google для преобразования в JSON.

https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=https://feeds.feedburner.com/thegearpost

Вот образец вывода. Он довольно длинный, поэтому я предоставляю только отрывок.

{
  "responseData": 
  {
    "feed":
    {
      "feedUrl":"https://feeds.feedburner.com/thegearpost",
      "title":"TheGearPost",
      "link":"https://thegearpost.com",
      "author":"",
      "description":"The online gadget, gear and gift guide for men.",
      "type":"rss20",
      "entries":
      [
        {
          "title":"Man Crates",
          "link":"https://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."

Я думаю, что могу заменить пример кода message разделом contentSnippet Google.

Однако это не работает, и это мой вопрос:

Как мне заставить это работать? Я пробовал val['responseData.feed.contentSnippet'], val['feed.contentSnippet'] и даже просто val['contentSnippet'] в разделе ниже, но ничего из этого не работает.

$.each(data, function(key, val) {
  if (messages.indexOf(val['responseData.feed.contentSnippet']) == -1){
    chrome.browserAction.setBadgeText({'text': 'New'});
    chrome.browserAction.setBadgeBackgroundColor({'color': '#f00'});
  }
});

В конце концов, я хотел бы иметь возможность заменить слова NEW на фактическое количество непрочитанных. Но я думаю, мне нужно для начала наладить проверку биографических данных.


Ответы:


1

То, что вам нужно перебрать, это responseData / feed / entries, поэтому:

$.each(data.responseData.feed.entries, 
  function(key, entry) {
    var snippet = entry.contentSnippet;
    // whatever you need to do
  }
);
05.05.2013
  • Спасибо. До сих пор не работает. Могу ли я изменить оператор if на if (messages.indexOf(entry['contentSnippet']) == -1){? 06.05.2013
  • Странный. С образцами данных значок хрома будет отображать НОВОЕ при обновлении. Я ничего не получаю, что наводит меня на мысль, что это все еще не работает. 06.05.2013
  • У меня отлично работает CodePen или JS-консоль (после того, как я отключил веб-безопасность в Chrome); тот же код должен нормально работать в расширении. Вы видите ошибки в консоли Javascript при запуске расширения? 06.05.2013
  • Хорошая точка зрения. Ошибок в консоли нет. Честно говоря, я не очень разбираюсь в JS / JSON, поэтому я надеялся, что некоторые незначительные изменения в расширении примера исправят его, но, похоже, это не так. 06.05.2013
  • Фактически, на фоновой странице ничего не записывается в журнал. Простой console.log("hello world"); даже не появляется. 06.05.2013
  • @BeardFist, да, думаю, да. Похоже, console.log не работает с фоновыми страницами. Я все еще не получаю рабочее расширение (это не должно быть так просто, как просто изменить несколько слов). stackoverflow.com/ вопросы / 3829150 / 06.05.2013
  • @Pat Уверяю вас, console.log отлично работает на фоновых страницах. 06.05.2013
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]