在将一些json数据流式传输到BQ之后,我们有一条记录如下:
boolean imagePresent = image.isDisplayed();
如何从中提取assertTrue(imagePresent, “No image is exist”);
?例如。我想得到"{\"Type\": \"Some_type\", \"Identification\": {\"Name\": \"First Last\"}}"
。
我尝试了https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions中显示的所有可能的组合,但都没有成功,也就是说,我认为:
type
是我所需要的。但是,我得到了:
JSONPath中无效的令牌,位于:[“ Type”]
行图片预览
答案 0 :(得分:3)
以下示例适用于BigQuery标准SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 id, "{\"Type\": \"Some_type\", \"Identification\": {\"Name\": \"First Last\"}}" raw_json UNION ALL
SELECT 2, '{"Type": "Some_type", "Identification": {"Name": "First Last"}}'
)
SELECT id, JSON_EXTRACT_SCALAR(raw_json , "$.Type") AS parsed_type
FROM `project.dataset.table`
有结果
Row id parsed_type
1 1 Some_type
2 2 Some_type
请参见下面的更新示例-查看我认为模仿您的案件的第三条记录
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 id, "{\"Type\": \"Some_type\", \"Identification\": {\"Name\": \"First Last\"}}" raw_json UNION ALL
SELECT 2, '''{"Type": "Some_type", "Identification": {"Name": "First Last"}}''' UNION ALL
SELECT 3, '''"{\"Type\": \"
null1\"}"
'''
)
SELECT id,
JSON_EXTRACT_SCALAR(REGEXP_REPLACE(raw_json, r'^"|"$', '') , "$.Type") AS parsed_type
FROM `project.dataset.table`
有结果
Row id parsed_type
1 1 Some_type
2 2 Some_type
3 3 null1
注意:我使用null1
而不是null
,因此您可以轻松地看到它不是NULL
而是字符串null1