Разбор JSON в Google Sheets - PullRequest
       91

Разбор JSON в Google Sheets

1 голос
/ 08 мая 2019

Я работаю с JSON впервые, поэтому прошу прощения за недостаток знаний.

Я пытаюсь использовать файл JSON для заполнения данных в Google Sheet.Я просто не знаю правильный синтаксис.Как я могу отформатировать функцию JSON для правильного доступа к данным и прекращения возврата ошибки?

Я пытаюсь получить данные отсюда:

https://eddb.io/archive/v6/bodies_recently.jsonl

в Google Sheets.

У меня загружен скрипт ImportJSON, и я протестировал его с очень маленьким JSON-файлом (http://date.jsontest.com/)), и он работает, как объявлено, используя эту функцию:

=ImportJSON("http://date.jsontest.com", "/date")

Однако, когда я пытаюсь использовать ту же функцию с JSON из eddb.io выше, я не могу заставить ее работать.

Что я хотел бы сделать, это вставить «имя» в A1а затем несколько атрибутов в столбцы, например так:

name  id  type_name  rotational_period, etc. 

Вот ссылка на мои тесты: https://docs.google.com/spreadsheets/d/1gCKpLcf-ytbPNcuQIIzxp1RMy7N5K8pD02hCLnL27qQ/edit?usp=sharing

Ответы [ 3 ]

1 голос
/ 09 мая 2019

Как насчет этого обходного пути?

Причина проблемы:

Когда я увидел URL-адрес https://eddb.io/archive/v6/bodies_recently.jsonl, я заметил, что расширение файла jsonl.Поэтому, когда я проверил значения, извлеченные из https://eddb.io/archive/v6/bodies_recently.jsonl, оказалось, что это были строки JSON.Это уже упоминалось в комментарии Dimu Designs .Также я могу подтвердить, что в официальном документе говорится, что bodies_recently.jsonl - это JSON с разделителями строк.

Обходной путь:

К сожалению, ImportJSON не может напрямую анализировать значения строк JSON.Поэтому необходимо изменить сценарий в качестве обходного пути.В вашей общей электронной таблице сценарий ImportJSON помещается как связанный с контейнером сценарий.В этой модификации я модифицировал скрипт.Пожалуйста, измените его следующим образом.

From:

Следующая функция может быть видна в строке 130 - 135 в вашем редакторе сценариев.

function ImportJSONAdvanced(url, query, options, includeFunc, transformFunc) {
  var jsondata = UrlFetchApp.fetch(url);
  var object   = JSON.parse(jsondata.getContentText());

  return parseJSONObject_(object, query, options, includeFunc, transformFunc);
}

To:

Пожалуйста, замените вышеуказанную функцию на следующий скрипт и сохраните скрипт.Затем, пожалуйста, поместите =ImportJSON("https://eddb.io/archive/v6/bodies_recently.jsonl", "/id") в ячейку, снова.

function ImportJSONAdvanced(url, query, options, includeFunc, transformFunc) {
  var jsondata = UrlFetchApp.fetch(url);
  var object = jsondata.getContentText().match(/{[\w\s\S].+}/g).map(function(e) {return JSON.parse(e)}); // Modified

  return parseJSONObject_(object, query, options, includeFunc, transformFunc);
}

Результат:

enter image description here

Примечание:

  • Хотя этот модифицированный скрипт работает для значений из https://eddb.io/archive/v6/bodies_recently.jsonl, я не уверен, работает ли этот модифицированный скрипт для всех значений строк JSON.Я прошу прощения за это.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, прошу прощения.

0 голосов
/ 09 мая 2019

вы можете использовать =IMPORTDATA(E1) и получить весь кусок в листах, а затем REGEXEXTRACT все необходимые вам детали

0

0 голосов
/ 08 мая 2019

Я не с ноутбуком, но вижу, что вы получаете сообщение об ошибке SyntaxError: Expected end of stream at char 2028 (line 132).

Я думаю, что данные, которые вы получили с URL, слишком длинные.

...