From 4e3d0f5b33c29e2b2924f8c65c6cf18ac4b6cb67 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 1 Mar 2018 17:26:13 +0100 Subject: [PATCH] Fix parsing of value with comma Closes gh-12297 --- .../org/springframework/boot/json/BasicJsonParser.java | 6 +++++- .../boot/json/AbstractJsonParserTests.java | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java b/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java index f07418f72d..ace90a3e83 100644 --- a/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java +++ b/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java @@ -124,6 +124,7 @@ public class BasicJsonParser implements JsonParser { int index = 0; int inObject = 0; int inList = 0; + boolean inValue = false; StringBuilder build = new StringBuilder(); while (index < json.length()) { char current = json.charAt(index); @@ -139,7 +140,10 @@ public class BasicJsonParser implements JsonParser { if (current == ']') { inList--; } - if (current == ',' && inObject == 0 && inList == 0) { + if (current == '"') { + inValue = !inValue; + } + if (current == ',' && inObject == 0 && inList == 0 && !inValue) { list.add(build.toString()); build.setLength(0); } diff --git a/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java b/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java index 433ad09d09..662e97de88 100644 --- a/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/json/AbstractJsonParserTests.java @@ -30,6 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Dave Syer * @author Jean de Klerk + * @author Stephane Nicoll */ public abstract class AbstractJsonParserTests { @@ -63,6 +64,13 @@ public abstract class AbstractJsonParserTests { assertThat(map.get("foo")).isEqualTo("123"); } + @Test + public void stringContainingComma() { + Map map = this.parser.parseMap("{\"foo\":\"bar1,bar2\"}"); + assertThat(map).hasSize(1); + assertThat(map.get("foo")).isEqualTo("bar1,bar2"); + } + @Test public void emptyMap() { Map map = this.parser.parseMap("{}");