我在hive表的其中一列中有一个字符串,如下所示。
{ABC:"ABCVAL",XYZ:"XYZVAL"}
我想将其转换为HIVE
{"ABC":"ABCVAL","XYZ":"XYZVAL"}
我该怎么做?
答案 0 :(得分:2)
简易版
假设该值不包含冒号(:
)符号。
查找除{,:
(键)后跟:
select regexp_replace('{ABC:"ABCVAL",XYZ:"XYZVAL"}','(?<key>[^{,:]+):','"${key}":');
{"ABC":"ABCVAL","XYZ":"XYZVAL"}
安全版
查找可选的{
(beforekey),然后是一系列字符(键),紧接着是:
(冒号),后跟"
,字符序列(值)然后再次"
,然后是,
或]
(后值)
select regexp_replace
(
'{ABC:"ABCVAL",XYZ:"XYZVAL"}'
,'(?<beforekey>\\{)?(?<key>.*?)(?<colon>:)(?<value>".*?")(?<aftervalue>[,}])'
,'${beforekey}"${key}"${colon}${value}${aftervalue}'
)
;
{"ABC":"ABCVAL","XYZ":"XYZVAL"}