【发布时间】:2016-06-20 23:48:23
【问题描述】:
使用 Google 的 BigQuery 时,有一个 function 可以使用 jsonPath 从 json 字符串中提取元素。例如:
SELECT JSON_EXTRACT(data,"$.key.value") AS feature FROM tablename
当 json 键本身包含一个点时,{"key.value":"value"} 不清楚如何正确转义。
这个jsonpathmessage 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 错误。
【问题讨论】:
-
我不确定双重转义是否可以通过 Web 界面、查询解析器、jsonpath 和函数进行。试试这个例子:
SELECT JSON_EXTRACT('{"foo": {"key": "value"}}', '$.foo') AS str, JSON_EXTRACT('{"foo.bar": {"key": "value"}}', '$.foo.bar') AS str2;使用 \\ 不会通过解析器。 -
@NorbertvanNobelen 问题中的 \ 只是用于创建示例 JSON 有效负载的 Java 语法,而不是实际 jsonpath 本身的一部分。
标签: json google-bigquery