首页 > 解决方案 > 正则表达式删除某些字符不适用于使用 gson 从 pojo 获得的 json 字符串

问题描述

我正在使用 gson 将 pojo 转换为 json 字符串。在那个字符串上,我想删除某些字符,然后想转换回 pojo。我的目标是从 pojo 中删除这些字符。我希望这个函数是通用的,因为它将用于不同类型的 pojo。

我曾尝试使用 jackson 和 gson 将 pojo 转换为字符串,但它们都不起作用

public <T> T sanitise(T object, Class<T> class){
    return gson.fromJson(gson.toJson(object).replaceAll("[\\s]", ""), class);
}

我得到这个:{"field1":"entry","field2":"\tentry\t","field3":"entry\tentry","field4":["\tentry\t","\tentry\tentry\t","entry"]}输出来自gson.toJson(pojo, pojoClass)

我想要这个: {"field1":"entry","field2":"entry","field3":"entryentry","field4":["entry","entryentry","entry"]}

pojo 是一些 pojoClass 的对象。

.replaceAll("[\\s]", "")当我传递字符串"\t\r\ndummy"但不使用的输出时工作gson.toJson()

标签: javaregexgson

解决方案


你说它在传递 Java 字符串文字时有效"\t\r\ndummy",但那是因为Java 编译器已将 、 和 转换为\t\r和字符,从而产生 string 。\nTABCRLF<TAB><CR><LF>dummy

"\\s"您说在使用包含 的输入的正则表达式时它不起作用"field2":"\tentry\t",但那是因为\t有两个字符\t,而不是TAB字符。

如果要消除text \t,则需要 regex "\\\\t",它是 regex 的 Java 字符串文字\\t,表示\字符后跟t字符。

使用replaceAll("\\\\t", "")而不是replaceAll("[\\s]", "").


推荐阅读