如何在hive中将字符串数组转换为json字符串?

问题描述

我的 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> 类型,您可能需要拆分数组并解析结构元素。如果你只是想得到 JSON 字符串,你需要的只是字符串操作:替换和连接。

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

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

\073 - 是一个分号。

如果它可以是大括号和分号之间的空格,请使用'\\}\\s*\073\\s*\\{'正则表达式,它对任意数量的空格都有效,如下所示:} ; {