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

标签 json google-bigquery

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

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

最佳答案

更新,新答案:

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')

关于json - 在 Bigquery json_extract() 函数中转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35843548/

相关文章:

java - 我的 Retrofit call.enqueue() 方法被完全跳​​过,不知道为什么

arrays - jq - 将对象列表转换为汇总对象

json - angular2 从服务打印 json

python - 如何使用 pyspark 将 Spark DataFrame 保存回 Google BigQuery 项目?

javascript - 这个 JSON 文件有什么问题?

python - 如何使用 python 消除 json 文件中的冗余

sql - BigQuery JSON - 标量子查询生成多个元素

google-bigquery - BigQuery SPLIT() 忽略空值

google-bigquery - 谷歌 bigquery 的 collect_set

sql - 使用 bigquery 将字符串拆分为多列