$
用作get_json_object
的根对象。我的json字符串已经以json键的名称为$
,如何提取它的值?我不想使用json_tuple。
create external table testing_hive (records string);
insert into testing_hive values("{\"$num\":\"hey\"}");
select get_json_object(testing_hive.records, '$.$num') from testing_hive;
答案 0 :(得分:1)
您可以将"$num"
替换为其中没有$
的其他内容,例如"xx_num"
:
select get_json_object(regexp_replace(testing_hive.records,'\\"\\$num\\"','\\"xx_num\\"'), '$.xx_num') as num from testing_hive;
结果:
hey
您还可以在单个regex_replace中用所有其他前缀替换所有键的$:
regexp_replace(testing_hive.records,'\\"\\$(.*?\\":)','\\"xx_$1')
我在模式中包括了":
,以确保它只匹配键,而不匹配值。如果您要删除'$1'
并保留没有'\\"xx_$1'
的键,请使用$
代替$
。
希望您有这个主意。相应地修改正则表达式模式。