我有一大堆看起来像这样的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附近发生意外的内部错误
答案 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");