如何在配置单元中将字符串数组转换为 json 字符串?

How to convert array of string into json string in hive?

我的配置单元 table test_tbl 有一个字符串字段 tag_score,其中包含一些 json 由“;”分隔的字符串:

----------
tag_score |
--------------------------------------------------------------------------------
{"keyword":"abc","score": "0.6"};{"keyword":"烟花","score":"0.516409816917747"} |
--------------------------------------------------------------------------------

如何从中提取正确的 json?结果字符串应该是这样的:

[{"keyword":"abc","score": "0.6"},{"keyword":"烟花","score":"0.516409816917747"}]

我试过这个蜂巢sql:

select split(tag, ";") from test_tbl;

但我得到的是字符串数组,不是我想要的:

["{"keyword":"abc","score": "0.6"}","{"keyword":"烟花","score":"0.516409816917747"}"]

如果要获取数组> 类型,您可能需要拆分数组并解析结构元素。如果你只想得到 JSON 字符串,你所需要的只是字符串操作:替换和连接。

用逗号替换大括号之间的分号,用方括号连接

concat('[',regexp_replace(tag_score ,'\}3\{','},{'),']')

3 - 是分号。

如果大括号和分号之间可以有空格,使用'\}\s*3\s*\{'正则表达式,它对任意数量的空格都有效,像这样:} ; {