-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'为唯一值并删除任何其他值?

4

1 回答 1

0

在上面的示例中,GREL 表达式:

value.parseJson()['categories']

生成一个包含两个值的数组:

["Chinese", "Restaurants"]

您可以使用作用于数组的 GREL 表达式来操作它。例如,要选择数组中的第一个值,您可以使用:

value.parseJson()['categories'][0]

这将选择数组中的第一个条目(增加表达式末尾方括号中的数字以选择数组中的其他条目)

如果要过滤数组中的特定值,可以使用“过滤器”表达式:

filter(value.parseJson()['categories'],v,v=="Chinese")

这将产生一个新数组,其中只有单词“Chinese”(在上面的示例中)。要将其存储在新列中,您需要将数组转换为字符串:

filter(value.parseJson()['categories'],v,v=="Chinese").join("")

为了避免区分大小写的问题,以及在“类别”数组中多次出现“中文”的可能性,我会先将值转换为小写,然后在转换为字符串之前对数组进行重复数据删除 - 所以你结束了与:

filter(forEach(value.parseJson()["categories"],v,v.toLowercase()),w,w=="chinese").uniques().join("")
于 2016-04-25T14:19:27.477 回答