{
"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']
会在OpenRefine中创建一个名为'categories'
的新列,但是是否可以过滤并保留'chinese'
作为唯一值并删除任何其他值?
答案 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("")