#java #json #regex
#java #json #регулярное выражение
Вопрос:
У меня в базе данных есть строка JSON, подобная этой:
{"name" : "DROCK", "details" : [{"age" : "23", "degree" : "BE", "Experience" : "worked in a company6as an intern"}]}
Я хочу удалить символ , но который не является допустимой escape-строкой. Я пытался использовать StringEscapeUtil, но здесь это мне не помогает.
Код, который я использовал здесь:
import org.apache.commons.lang.xwork.StringEscapeUtils;
public class JSONEscape {
public static void main(String args[]) {
String testString = "{"name" : "DROCK", "details" : [{"age" : "23", "degree" : "BE", "Experience" : "worked in a company6as an intern"}]}";
System.out.println(StringEscapeUtils.escapeJava(testString));
}
}
Как я должен экранировать допустимые символы и удалять неправильные символы, подобные этому. но я хотел бы сохранить допустимые escape-символы, такие как n, t и т.д.
Наконец, я хотел бы получить такой результат:
{"name" : "DROCK", "details" : [{"age" : "23", "degree" : "BE", "Experience" : "worked in a company6as an intern"}]}
Ответ №1:
Если вы хотите удалить неправильные escape-последовательности в строке JSON, то это просто.
String testString = "{"name" : "DROCK", "details" : ["age" : "23", "degree" : "BE", "Experience" : "worked in a company\6as an intern"]}";
System.out.println(testString.replaceAll("\([^bfnrt"\])", "$1"));
Это регулярное выражение буквально означает «везде, где за обратной косой чертой следует недопустимый escape-символ, отбрасывайте обратную косую черту».
Комментарии:
1. Спасибо @Leo Aso за ваш ответ, я изменил строку замены следующим образом: System.out.println(testString.replaceAll(«\[^bfnrt»‘\]», «$1»)); Теперь я вижу? вместо 6 в SOP 🙁
2. Убедитесь, что в вашей тестовой строке вы вводите
\6
не6
. Если вы вводите JSON непосредственно в строке, вам нужно написать обратную косую черту дважды, потому что Java распознает6
как escape-последовательность, равнуюu0006
, но если вы введете\6
, она просто оставит ее как6
.