Как сохранить только определенные элементы JSON в новом столбце OpenRefine
{
"business_id": "SQ0j7bgSTazkVQlF5AnqyQ",
"full_address": "214 E Main St\nCarnegie\nCarnegie, PA 15106",
"hours": {},
"open": true,
** "categories": ["Chinese", "Restaurants"] ** ,
"city": "Carnegie",
"review_count": 9,
"name": "Don Don Chinese Restaurant",
"neighborhoods": ["Carnegie"],
"longitude": -80.0849615,
"state": "PA",
"stars": 2.5,
"latitude": 40.4083473,
"attributes": {
"Take-out": true,
"Alcohol": "none",
"Noise Level": "quiet",
"Parking": {
"garage": false,
"street": false,
"validated": false,
"lot": false,
"valet": false
},
"Delivery": true,
"Has TV": true,
"Outdoor Seating": false,
"Attire": "casual",
"Waiter Service": false,
"Accepts Credit Cards": true,
"Good for Kids": true,
"Good For Groups": false,
"Price Range": 1
},
"type": "business"
}
value.parseJson()['categories']
создаст новый столбец с именем 'categories'
в OpenRefine, но возможно ли отфильтровать и сохранить 'chinese'
как единственное значение и удалить какие-либо другие значения?
1 ответ
В приведенном выше примере выражение GREL:
value.parseJson()['categories']
В результате получается массив, содержащий два значения:
["Chinese", "Restaurants"]
Вы можете манипулировать этим с помощью выражений GREL, которые действуют на массивы. Например, чтобы выбрать первое значение в массиве, вы можете использовать:
value.parseJson()['categories'][0]
Который выберет первую запись в массиве (увеличьте число в квадратных скобках в конце выражения, чтобы выбрать другие записи в массиве)
Если вы хотите фильтровать определенное значение в массиве, вы можете использовать выражение "фильтр":
filter(value.parseJson()['categories'],v,v=="Chinese")
Это приведет к созданию нового массива, содержащего только слово "китайский" (в приведенном выше примере). Чтобы сохранить это в новом столбце, вам нужно преобразовать массив в строку:
filter(value.parseJson()['categories'],v,v=="Chinese").join("")
Чтобы избежать проблем с чувствительностью к регистру и возможностью многократного появления "китайского" в массиве "категорий", я бы сначала преобразовал значения в нижний регистр и лишил дубликат массива перед преобразованием в строку - так что вы заканчиваете с:
filter(forEach(value.parseJson()["categories"],v,v.toLowercase()),w,w=="chinese").uniques().join("")