Регулярное выражение для замены пустых записей JSON - PullRequest
0 голосов
/ 24 января 2019

У меня есть кусок JSON, который выглядит так:

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

К сожалению, служба, которую я отправляю, тоже не обрабатывает пустые записи. У меня ограниченный контроль над источником, поэтому я ищу Java Regex, который можно использовать с ReplaceAll, чтобы избавиться от всех пустых записей.

Результат должен выглядеть следующим образом:

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

Самое близкое, что у меня есть, это:

string.replaceAll(",?\"*\":\\", "");

Но я получаю эту ошибку:

java.util.regex.PatternSyntaxException: непредвиденная внутренняя ошибка рядом с индексом 7

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Попробуйте это (при условии, что id никогда не будет пустым):

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

Regex : , "\w+?": ""

Выход :{"id": "2345", "in": "sadfasd647", "name": "Delta", "created": "2018-01-19"}

Вы получаете это исключение в своем регулярном выражении из-за \\ в конце.Это будет равно одному \ для регулярного выражения, поэтому он ожидает, что после него будет экранированный символ, а у вас его нет.

0 голосов
/ 24 января 2019

Попробуйте это регулярное выражение, также первое значение может быть пустым и все равно должно быть правильно заменено:

(, "\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"}
0 голосов
/ 24 января 2019

Попробуйте это

Попробуйте заменить любую пустую строку или пробел, перед которыми стоит запятая (или [или], если она встречается точно в начале или конце списка), на ноль. Должно работать независимо от того, есть ли в строке JSON пробел или нет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...