问题描述
我的 hive 表 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"}]
我试过这个 hive sql:
select split(tag,";") from test_tbl;
但是我得到了字符串数组,而不是想要的字符串:
["{"keyword":"abc","score": "0.6"}","{"keyword":"烟花","score":"0.516409816917747"}"]
解决方法
如果您想获得 array
用逗号代替大括号之间的分号,用方括号连接
concat('[',regexp_replace(tag_score,'\\}\073\\{','},{'),']')
\073
- 是一个分号。
如果它可以是大括号和分号之间的空格,请使用'\\}\\s*\073\\s*\\{'
正则表达式,它对任意数量的空格都有效,如下所示:} ; {