hive-remove子字符串

ulydmbyx  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(377)

我需要用空字符串替换给定字符串中的子字符串,子字符串出现在字符串的不同位置。
我想移除 "fruit":"apple" 根据这些可能的字符串组合,需要相应的字符串:

{"client":"web","fruit":"apple"}   --> {"client":"web"}
{"fruit":"apple","client":"web"}   --> {"client":"web"}
{"client":"web","fruit":"apple","version":"v1.0"} --> {"client":"web","version":"v1.0"}
{"fruit":"apple"}   -->  null or empty string

我曾经 regexp_replace(str, "\,*\"fruit\"\:\"apple\"", "") 但这并没有让我得到预期的结果。构造正则表达式的正确方法是什么?

q3qa4bjr

q3qa4bjr1#

似乎您正在处理json格式的数据。根据包含的依赖项,您可以完全不使用正则表达式来实现它。
例如,如果您使用的是google的lib gson,那么您可以将字符串解析为jsonobject,然后从中删除属性

String input = "your data";
JsonParser parser = new JsonParser();
JsonObject o = parser.parse(input).getAsJsonObject();

try {
   String foundValue = o.getAsJsonPrimitive("fruit").getAsString();
   if ("apple".equals(foundValue)) {
      o.remove("fruit");
   }
} catch (Exception e) {
  e.printStackTrace();
}
String filteredData = o.toJSONString();

p、 代码不是最终版本,它可能需要处理某些情况(当没有这样的字段,或者它包含非原语值时),需要进一步的细节来涵盖它
p、 在这种情况下使用regex会降低代码的可读性和灵活性

相关问题