2016-11-21 6 views
3

Я знаю, как разбирать json-ячейки в Open уточнить, но это слишком сложно для меня.Лучший способ разобрать большой и запущенный Json-файл с OpenRefine (или R)

enter image description here

Я использовал API для извлечения календаря 4730 номеров AirBnB в, идентифицированных по идентификаторам.

Вот пример одного Json файла: https://fr.airbnb.com/api/v2/calendar_months?key=d306zoyjsyarp7ifhu67rjxn52tv0t20&currency=EUR&locale=fr&listing_id=4212133&month=11&year=2016&count=12&_format=with_conditions

Для каждого ID и каждый день года с этого времени до ноября 2017 года, я хотел бы извлечь наличие этого номера (истина или ложь) и его цена в этот день.

enter image description here

Я не могу понять, как разобрать эту информацию. Я предполагаю, что это подразумевает серию вложенных forEach, но я не могу найти правильный способ сделать это с помощью Open Refine.

Я попытался, конечно,

forEach(value.parseJson().calendar_months, e, e.days) 

Результатом является массив массивов dictionnaries, разрушающий меня.

Любая помощь была бы оценена. Если операция слишком сложная в Open Refine, решение с R (или Python) также будет хорошо для меня.

ответ

1

Я думаю, что вы на правильном пути. Выход:

forEach(value.parseJson().calendar_months, e, e.days) 

трудно читать, потому что OpenRefine и JSON как использовать квадратные скобки для обозначения массивов. То, что вы получаете от этого выражения, представляет собой массив OR, содержащий двенадцать элементов (по одному для каждого месяца в году). Элементами массива OR являются JSON - каждый из них представляет собой массив дней в месяце.

Чтобы сохранить шаги управляемы я предлагаю решать так:

Первое использование

forEach(value.parseJson().calendar_months,m,m.days).join("|") 

Вы должны использовать «присоединиться», потому что OR не может хранить или массивы непосредственно в камере - это должна быть строка.

Затем используйте «Редактировать ячейки -> Разделить многозначные ячейки» - это даст вам 12 строк на идентификатор, каждый из которых содержит выражение JSON. Теперь для каждого ID у вас есть 12 строк в ИЛИ

Тогда используйте:

forEach(value.parseJson(),d,d).join("|") 

Это раскалывает JSON вниз в отдельные дни

Затем используйте «Edit Cells-> Split многозначных клетки» снова разделить детали на каждый день в свою собственную ячейку.

Использование JSON из приведенного выше примера URL - это дает мне 441 строку для одного идентификатора - каждый содержит JSON, описывающий доступность & цена за один день. На этом этапе вы можете использовать функцию «заполнить» в столбце ID, чтобы заполнить идентификатор для каждой из строк.

Теперь у вас есть некоторые довольно простой JSON в каждой клетке - так что вы можете извлечь доступность с помощью

value.parseJson().available 

т.д.

+0

это работает! Большое спасибо, Оуэн. :) Я был слишком сосредоточен на решении проблемы с помощью одной сложной формулы. Кроме того, результат «forEach (value.parseJson(), calendar_months, m, m.days) .join (« | »)» дал ответ в квадратных скобках, что заставило меня подумать, что это еще один массив Open Refine. Еще раз спасибо. –

1

Вместо того, чтобы создать свой проект в виде текста, и работа с Grel в parse out ...

Лучший способ - просто выбрать часть записи JSON, с которой вы хотите работать, используя наш мастер визуального импортера для файлов JSON и XML-файлов (вы даже можете использовать URL-адрес, указывающий на файл JSON, как в ваш пример). (Видео урок показывает, как здесь: https://www.youtube.com/watch?v=vUxdB-nl0Bw)

  1. Выберите часть JSON, который содержит ваши записи, которые вы хотите, чтобы разобрать и работать (это может быть любой повторив часть, просто выбрать один из них и OpenRefine извлечет все остальное) enter image description here

  2. Ограничить количество строк данных, которые вы хотите загрузить во время создания, или оставить значение по умолчанию для всех строк. enter image description here

  3. Нажмите «Создать проект» и теперь вы в режиме «Строки». Однако, если вы считаете, что режим записей лучше подходит для контекста, просто импортируйте проект снова как JSON, а затем выберите следующую внешнюю область содержимого, возможно, более крупный массив, содержащий ключевое поле и т. Д. В этом примере ключ поле, вероятно, было бы Date, и почему я выделяю всю запись за определенную дату. Таким образом, OpenRefine будет иметь клавиши для каждой записи, а режим записи позволяет вам работать с ними лучше, чем режим Row.

Вы можете взять этот пример и сделать его лучше и еще более полезным для всех, добавьте его в наш раздел Wiki на How to Use

+0

Tanx, Thad. Я знаю этот метод. Но в этом случае у меня было более 4700 файлов ссылок/Json, извлеченных с помощью «Добавить столбец путем выбора URL-адресов». –

 Смежные вопросы

  • Нет связанных вопросов^_^