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

Escaping Characters in Bigquery json_extract() function

当使用 Google 的 BigQuery 时,有一个 function 可以使用 json 从 json 字符串中提取元素小路。例如:

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

当 json 键本身包含一个点时,{"key.value":"value"} 不清楚如何正确转义它。

this 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 中,这种类型的转义尝试会导致 Error: JSONPath parse error 错误。

更新,新答案:

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

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

和returns

{"foo":"bar"}

旧的,现在已经过时的答案:

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

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

使用反引号转义(它也用于转义 project/dataset 名称中的连字符)

SELECT JSON_VALUE(json_field.`key.value`) AS feature FROM tablename