bigquery-json\u extract只提取第一个条目

ltqd579y  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(341)

我有一个包含json字符串的列,如下所示:

[{"answer":"europe-austria-swiss","text":"Österreich, Schweiz"},{"answer":"europe-italy","text":"Italien"},{"answer":"europe-france","text":"Frankreich"}]

我想提取一列和一行中给出的所有答案,用逗号分隔:

europe-austria-swiss, europe-italy, europe-france

我想我尝试了json\u extract和json\u extract\u数组提供的所有可能性,或者替换括号和其他符号,但是我要么只提取第一个条目(在本例中)

europe-austria-swiss

)或者它作为数组分成几行,我不能再从中提取“answer”的字符串。
有人知道怎么解决那个问题吗?非常感谢!当然,这个列是一个更大的表的一部分(如果这是相关的话)。

fruv7luv

fruv7luv1#

下面是bigquery标准sql


# standardSQL

SELECT (
  SELECT STRING_AGG(JSON_EXTRACT_SCALAR(answer, '$.answer'), ' ,') 
  FROM UNNEST(JSON_EXTRACT_ARRAY(json_string)) answer
  ) AS answers 
FROM `project.dataset.table`

您可以使用下面的示例中的问题中的示例数据来测试、播放上述内容


# standardSQL

WITH `project.dataset.table` AS (
  SELECT '[{"answer":"europe-austria-swiss","text":"Österreich, Schweiz"},{"answer":"europe-italy","text":"Italien"},{"answer":"europe-france","text":"Frankreich"}]' json_string
)
SELECT (
  SELECT STRING_AGG(JSON_EXTRACT_SCALAR(answer, '$.answer'), ' ,') 
  FROM UNNEST(JSON_EXTRACT_ARRAY(json_string)) answer
  ) AS answers 
FROM `project.dataset.table`

有结果的

Row answers
1   europe-austria-swiss ,europe-italy ,europe-france
ac1kyiln

ac1kyiln2#

我想我知道发生了什么事(如果我错了,请纠正我)。
我最好的猜测是你在尝试这样的事情:

SELECT JSON_EXTRACT(json_text, "$.answer") AS answers
FROM UNNEST([
'{"answer":"europe-austria-swiss","text":"Österreich, Schweiz"},{"answer":"europe-italy","text":"Italien"},{"answer":"europe-france","text":"Frankreich"}'
]) as json_text

这将返回:

"europe-austria-swiss"

但是,如果您为类似的内容更改基础数据(每行作为一个json字符串对象),应该可以解决这个问题:

SELECT JSON_EXTRACT(json_text, "$.answer") AS answers
FROM UNNEST([
'{"answer":"europe-austria-swiss","text":"Österreich, Schweiz"}',
'{"answer":"europe-italy","text":"Italien"}',
'{"answer":"europe-france","text":"Frankreich"}'
]) as json_text

结果:

"europe-austria-swiss"
"europe-italy"
"europe-france"

希望这有帮助!

相关问题