Разбор JSON из таблицы Google - PullRequest
       26

Разбор JSON из таблицы Google

6 голосов
/ 03 апреля 2012

РЕДАКТИРОВАТЬ: entry.content.$t это неправильное поле для доступа к отдельным ячейкам. entry.gsx $ [ заголовок столбца ячейки ] - правильный метод.Извинения и спасибо за помощь в решении этой проблемы.

Оригинальный вопрос:

Я пытаюсь проанализировать данные JSON из таблицы Google .Проблема в том, что поле записей возвращает строку, которая является целой строкой электронной таблицы, но выглядит как искаженный объект.Как другие люди анализируют эти данные?Вот как выглядит узел содержимого:

"content":
{
    "type"   :"text",
    "$t"     :"location: 780 Valencia St San Francisco, CA 94110,
               phonenumber: (555) 555-5555,
               website: http://www.780cafe.com,
               latitude: 37.760505,
               longitude: -122.421447"
},

Посмотрите внимательно, поле $t возвращает всю строку, которая является строкой в ​​электронной таблице Google.Таким образом, entry.content.$t возвращает строку: location: 780 Valencia St San Francisco, CA 94110, phonenumber: (555) 555-5555...

Еще более усугубляет эту проблему то, что некоторые ячейки в электронной таблице имеют запятые (например, адреса), которые не экранированы и не заключены в кавычки.Что-то вроде

jQuery.parseJSON(entry.content.$t)

или

eval('('+ entry.content.$t + ')')

выдает ошибку.Я предполагаю, что регулярное выражение является вариантом, но я надеюсь, что другие, возможно, решили это более изящным способом.Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

«Текст» внутри атрибута $t не является JSON.Согласно документации, текстовые узлы преобразуются в атрибуты $t, поэтому вы не можете полагаться на то, что там правильно отформатирован JSON.

Я бы предложил вместо этого использовать регулярное выражение, хотя я предупрежу вас, чтодля анализа этого вывода потребуются некоторые причудливые вещи.Вы в конечном итоге будете использовать утверждение, поскольку не можете разделить запятыми - вам придется искать (\w+):, но для того, чтобы найти следующий элемент, вам нужно будет взять все, вплоть до другого совпадения (\w+):, но также не сожрать.Это можно сделать.

1 голос
/ 06 января 2016

Совсем недавно у меня возникла та же проблема.

Чтобы проанализировать содержимое $ t , вы можете использовать этот RegEx:

/(\w+): (.+?(?=(?:, \w+:|$)))/mgi

, он вернетсяпары ключ-значение.

Пример JavaScript:

    var currentPropertiesText = jsonEntry['content']['$t'];

    // var propsArray = currentPropertiesText.split(", ");
    var re = /(\w+): (.+?(?=(?:, \w+:|$)))/mgi;
    var propsArray = re.exec(currentPropertiesText)
    var props = {};

    while (propsArray != null) {

        var propName = propsArray[1];
        var propValue = propsArray[2];

        props[propName] = propValue;

        propsArray = re.exec(currentPropertiesText);
    }

Это должно помочь: -)

1 голос
/ 03 апреля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...