正则表达式替换空的JSON条目

时间:2019-01-24 01:56:17

标签: java regex

我有一大堆看起来像这样的JSON:

.get(0)

不幸的是,我发送的服务也无法处理空白条目。我对源代码的控制有限,因此我正在寻找可以与{"id": "2345", "in": "sadfasd647", "name": "Delta", "created": "2018-01-19", "updated": ""} 配合使用的Java正则表达式,以摆脱所有空条目。

结果应如下所示:

ReplaceAll

我最接近的是这个

{"id": "2345", "in": "sadfasd647", "name": "Delta", "created": "2018-01-19"}

但是我遇到了这个错误:

  

java.util.regex.PatternSyntaxException:索引7附近发生意外的内部错误

3 个答案:

答案 0 :(得分:3)

尝试以下操作(假设id永远不会为空):

String json = "{\"id\": \"2345\", \"in\": \"sadfasd647\", \"name\": \"Delta\", \"created\": \"2018-01-19\", \"updated\": \"\"}";
json = json.replaceAll(", \"\\w+?\": \"\"", "");
System.out.println(json);

正则表达式, "\w+?": ""

输出{"id": "2345", "in": "sadfasd647", "name": "Delta", "created": "2018-01-19"}

由于末尾有\\,因此您在正则表达式中遇到了该异常。对于正则表达式来说,这等于一个\,因此它希望在字符之后转义一个字符,而没有一个字符。

答案 1 :(得分:3)

尝试使用此正则表达式,第一个值也可以为空白,并且仍应正确替换:

(, "\w+": "")|("\w+": "",)

因此您的Java代码应如下所示:

String json = "{\"id\": \"2345\", \"in\": \"sadfasd647\", \"name\": \"Delta\", \"created\": \"2018-01-19\", \"updated\": \"\"}";
String result = json.replaceAll("(, \"\\w+\": \"\")|(\"\\w+\": \"\",)", "");
System.out.println(result);

打印以下结果:

{"id": "2345", "in": "sadfasd647", "name": "Delta", "created": "2018-01-19"}

答案 2 :(得分:1)

尝试一下

尝试将任何空字符串或空格替换为逗号(如果恰好出现在列表的开头或结尾,则用逗号分隔;如果为空,则用null代替)。实际的JSON字符串是否具有空格都应该起作用。

String result = str.replaceAll("(?<=,|\\[)\\s*(?=,|\\])","null");