如何 JSON_EXTRACT 使用列中的键?

how to JSON_EXTRACT using key from a column?

Bigquery JSON_EXTRACT 函数将字符串作为 return 值的键。是否可以从列中取出字符串?

要处理的 json_string_expr 类似于 {'A': '123', 'B': '456'}。 我想从列 list 中获取密钥。 Bigquery table 和预期结果如下。

   |   json_string_expr        | list   | expected_result
   |{'A': '123', 'B': '456'}   | A      |  '123'
   |{'A': '789', 'B': '012'}   | B      |  '012'

JSON_EXTRACT(json_string_expr, '$.list') 无法给出预期的结果,因为该函数需要 $. 之后的字符串。 知道如何使用标准 SQL 来 return 预期结果吗?

以下适用于 BigQuery 标准 SQL

遗憾的是,JSONPath 必须是字符串文字或查询参数,因此请参阅下面的解决方法

#standardSQL
SELECT json_string_expr, list,
  (SELECT SPLIT(kv, ':')[SAFE_OFFSET(1)]
    FROM UNNEST(SPLIT(REGEXP_REPLACE(json_string_expr, r"[{} ']", ''))) kv 
    WHERE SPLIT(kv, ':')[SAFE_OFFSET(0)] = list
  ) value
FROM `project.dataset.table`  

另一个更简洁的版本是

#standardSQL
SELECT json_string_expr, list,
  REGEXP_EXTRACT(json_string_expr, CONCAT(r"'", list, "': '(.*?)'")) value
FROM `project.dataset.table`

如果将上述两个版本应用于您问题中的样本数据 - 结果是

Row json_string_expr            list    value    
1   {'A': '123', 'B': '456'}    A       123  
2   {'A': '789', 'B': '012'}    B       012