在Bigquery json_extract()函数中转义字符

时间:2016-03-07 12:16:51

标签: json google-bigquery

使用 Google的BigQuery 时,可以使用jsonPath从json字符串中提取元素function。例如:

SELECT JSON_EXTRACT(data,"$.key.value") AS feature FROM tablename

当json密钥本身包含一个点时,{"key.value":"value"}它不清楚如何正确地逃避它。

这个jsonpath message board question说jsonpath本身支持这种格式

@Test 
public void path_with_bracket_notation() throws Exception { 
    String json = "{\"foo.bar\": {\"key\": \"value\"}}"; 

    Assert.assertEquals("value", JsonPath.read(json, "$.['foo.bar'].key")); 

但是在bigquery中,这种类型的espcaping尝试会导致Error: JSONPath parse error错误。

1 个答案:

答案 0 :(得分:2)

更新,新答案:

BigQuery的JSON_EXTRACTJSON_EXTRACT_SCALAR函数现在支持JSONPath中的JSON括号表示法,因此以下查询有效:

SELECT JSON_EXTRACT('{"key.value": {"foo": "bar"}}', "$['key.value']")

并返回

{"foo":"bar"}

旧的,现在过时的回答:

不幸的是,BigQuery不支持在json路径中转义特殊字符。解决方法是使用REPLACE函数将点转换为下划线,即

SELECT 
  json_extract(
    replace('{"key.value":"value"}',
    'key.value',
    'key_value'),
  '$.key_value')