2016-04-21 7 views
-1
{ 
    "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' в качестве единственного значения и удалять любые другие значения?Как сохранить только определенные элементы JSON в новом OpenRefine колонке

+0

вы можете уточнить, если нужно выбрать «китайский» из категорий массива является потому что вы хотите: сохранить первое значение в списке (в данном случае «китайский») ; ИЛИ выберите конкретное слово из массива (и в этом случае слово «китайский»); Или что-то другое –

ответ

0

В приведенном выше примере, выражение 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("") 

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

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