diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java index b74f8a65001..fbe3a8f53fc 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java @@ -113,9 +113,16 @@ public class BasicJsonParser extends AbstractJsonParser { int inObject = 0; int inList = 0; boolean inValue = false; + boolean inEscape = false; StringBuilder build = new StringBuilder(); while (index < json.length()) { char current = json.charAt(index); + if (inEscape) { + build.append(current); + index++; + inEscape = false; + continue; + } if (current == '{') { inObject++; } @@ -135,6 +142,9 @@ public class BasicJsonParser extends AbstractJsonParser { list.add(build.toString()); build.setLength(0); } + else if (current == '\\') { + inEscape = true; + } else { build.append(current); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java index 662e97de881..e43d45369bc 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java @@ -170,4 +170,11 @@ public abstract class AbstractJsonParserTests { this.parser.parseList("\n\t{}"); } + @Test + public void escapeQuote() { + String input = "{\"foo\": \"\\\"bar\\\"\"}"; + Map map = this.parser.parseMap(input); + assertThat(map.get("foo")).isEqualTo("\"bar\""); + } + }