使用 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
错误。
答案 0 :(得分:2)
更新,新答案:
BigQuery的JSON_EXTRACT
和JSON_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')