Arhn - архитектура программирования

Парсинг внешнего JSON с массивом и сохранение

У меня есть веб-сайт drupal, на котором статьи создаются, а затем выводятся в формате JSON по определенной ссылке. В настоящее время я пытаюсь разобрать JSON и сохранить заголовок, тело и т. д. статей на Parse Core. Пример вывода JSON:

[
  {
    "vid": "2",
    "uid": "1",
    "title": "Post 2",
    "log": "",
    "status": "1",
    "comment": "0",
    "promote": "1",
    "sticky": "0",
    "nid": "2",
    "type": "article",
    "language": "und",
    "created": "1435932743",
    "changed": "1436089990",
    "tnid": "0",
    "translate": "0",
    "revision_timestamp": "1436089990",
    "revision_uid": "1",
    "body": {
      "und": [
        {
          "value": "Integer at mi blandit ipsum malesuada consectetur...",
          "summary": "",
          "format": "plain_text",
          "safe_value": "<p>Integer at mi blandit ipsum malesuada consectetur...</p>\n",
          "safe_summary": ""
        }
      ]
    },
    "field_tags": [],
    "field_image": [],
    "name": "uknj",
    "picture": "0",
    "data": "b:0;"
  },
  {
    "vid": "1",
    "uid": "1",
    "title": "Sample Post",
    "log": "",
    "status": "1",
    "comment": "0",
    "promote": "1",
    "sticky": "0",
    "nid": "1",
    "type": "article",
    "language": "und",
    "created": "1435931896",
    "changed": "1436090000",
    "tnid": "0",
    "translate": "0",
    "revision_timestamp": "1436090000",
    "revision_uid": "1",
    "body": {
      "und": [
        {
          "value": "Lorem ipsum dolor sit amet...",
          "summary": "",
          "format": "plain_text",
          "safe_value": "<p>Lorem ipsum dolor sit amet...</p>\n",
          "safe_summary": ""
        }
      ]
    },
    "field_tags": [],
    "field_image": [],
    "name": "uknj",
    "picture": "0",
    "data": "b:0;"
  }
]

Я частично основывал свой код на этом github . Однако из-за того, что объект body содержит массив, я не могу его дальше анализировать, и прямое значение body, содержащее нужный мне текст, не может быть сохранено.

Я просмотрел этот вопрос Stackoverflow и все еще не смог решить проблему. . Возвращалась ошибка Cannot read property 'length' of undefined. Стоит отметить, что видео и заголовок успешно сохранены.

Кроме того, отмечен только один из сообщений, тот, что с "vid" : "2", непонятно, почему он не хранит другой.

Мой код main.js:

var _ = require("underscore");
Parse.initialize('xyz', '123');
var Articles = Parse.Object.extend("Articles");
var article = new Articles();

Parse.Cloud.job("ArticleFeed", function(request, response) {
  Parse.Cloud.httpRequest({
        method: 'GET',
        url: 'URL HERE',
        success: function(httpResponse) {
         var data= JSON.parse(httpResponse.text);
           for (var i = 0; i < data[i].body.und.length; i++) {
        article = new Articles(),
        content = data[i];
        article.set("body", content.body.und[0].value);
        article.set("vid", content.vid);
        article.set("title", content.title);
        var epochTime = content.created;
        var newDate = moment.utc(1234567890000);
        article.set("date_created", newDate);

        articles.push(article);
      }

          article.save();

            response.success(httpResponse.text); // This will respond with the contents of the http response
        },
        error: function(httpResponse) {
            console.error('Request failed with response code ' + httpResponse.status);
            response.error('Request failed with response code ' + httpResponse.status);
        }
    });

});

РЕДАКТИРОВАТЬ: Это правильный фрагмент кода, который работает, заменяя неправильный цикл for выше:

  for (var i = 0; i < data[i].body.und.length; i++) {
            article = new Articles(),
            content = data[i];
            article.set("body", content.body.und[0].value);
            article.set("vid", content.vid);
            article.set("title", content.title);

            articles.push(article);
      }

  • Ваш код выдает ошибку в этой строке: for (var i = 0; i ‹ data.length; i++) { Вы намеревались использовать jsonData вместо data? 06.07.2015
  • хороший звонок, исправил это. Ошибка остается прежней. 06.07.2015

Ответы:


1

Ваш вывод JSON представляет собой массив объектов.

Итак, если ваши данные JSON содержатся в переменной, скажем, «jsonData», то из «jsonData» вы можете добраться до «тела» следующим образом:

jsonData[0].body

Затем, чтобы получить массив внутри тела, вы должны сделать так:

jsonData[0].body.und

В вашем коде вы не достигаете массивов должным образом, поэтому вы получаете ошибку неопределенной длины.

06.07.2015
  • и чтобы получить массив внутри und, в частности поле значения, будет ли это jsonData[0].body.und[0].value? 06.07.2015
  • Nvm, ответил на мой собственный вопрос, это действительно было, как это сделать. Обновлю мой вопрос, чтобы показать полностью правильный код. Спасибо. 06.07.2015
  • Да, вы правы, jsonData[0].body.und[0] даст вам 1-й объект внутри массива und (0-й элемент), а затем вы можете вызвать его свойство value с помощью .value. Итак, jsonData[0].body.und[0].value верно. Извините за поздний ответ, так как здесь была ночь, и я лег спать :P 07.07.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..