Какое выражение GREL используется для получения JSON значений из ячейки в OpenRefine? - PullRequest
1 голос
/ 09 мая 2020

У меня есть csv, который содержит текстовые записи в ячейках, а также JSON массивы. Я новичок в OpenRefine и GREL, и у меня проблемы с поиском выражения для очистки этого csv. Я хочу получить только значение ключа «name» в массивах JSON.

Примеры ячеек:

[{'name': 'Pixar Animation Studios', 'id': 3}]
[{'name': 'TriStar Pictures', 'id': 559}, {'name': 'Teitler Film', 'id': 2550}, {'name': 'Interscope Communications', 'id': 10201}]
[{'name': 'Twentieth Century Fox Film Corporation', 'id': 306}]
[{'iso_3166_1': 'US', 'name': 'United States of America'}]

Ожидаемые возвращаемые значения:

Pixar Animation Studios
TriStar Pictures, Teitler Film, Interscope Communications
Twentieth Century Fox Film Corporation
United States of America

Ответы [ 2 ]

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

Если ваши данные выглядят так ...

enter image description here

... Формула Тома Морриса не работает. Кажется, что Open Уточнить не любит одинарные кавычки в Json. Кроме того, поскольку у вас иногда есть несколько «имен», вам придется получить их все с помощью forEach() l oop.

Формула следующая:

forEach(value.replace("'", '"').parseJson(), v, v.name).join(',')

Это означает: заменить 'на', проанализировать json, а затем для каждого элемента в массиве поместить его в переменную v и получить его значение «имя». Наконец, присоедините полученный массив с запятой.

Конечный результат:

enter image description here

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

Сначала вам нужно преобразовать строку в объект JSON, а затем вы сможете получить доступ к значениям, используя обычный доступ к словарю на основе ключей.

value.parseJson()['name']

Вы можете использовать это выражение для добавления нового столбца или для работы с существующим столбцом с помощью преобразования.

...