在搜索字符串中包含$ _get_json_object

时间:2019-08-23 20:44:02

标签: json hive hiveql

$用作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;

1 个答案:

答案 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'的键,请使用$代替$

希望您有这个主意。相应地修改正则表达式模式。