diff --git a/src/main/java/org/json/XML.java b/src/main/java/org/json/XML.java
index 539285d..7e4b0bb 100644
--- a/src/main/java/org/json/XML.java
+++ b/src/main/java/org/json/XML.java
@@ -393,6 +393,11 @@ public class XML {
context.append(tagName, jsonObject);
} else if(context.isEmpty()) { //avoids resetting the array in case of an empty tag in the middle or end
context.put(tagName, new JSONArray());
+ if (jsonObject.isEmpty()){
+ context.append(tagName, "");
+ }
+ } else {
+ context.append(tagName, "");
}
} else {
if (nilAttributeFound) {
@@ -455,6 +460,7 @@ public class XML {
if(context.isEmpty()) {
context.put(tagName, new JSONArray());
}
+ context.append(tagName, "");
} else if (jsonObject.length() == 1
&& jsonObject.opt(config.getcDataTagName()) != null) {
context.append(tagName, jsonObject.opt(config.getcDataTagName()));
diff --git a/src/test/java/org/json/junit/XMLConfigurationTest.java b/src/test/java/org/json/junit/XMLConfigurationTest.java
index 8edbe79..e8ff3b6 100755
--- a/src/test/java/org/json/junit/XMLConfigurationTest.java
+++ b/src/test/java/org/json/junit/XMLConfigurationTest.java
@@ -1092,7 +1092,7 @@ public class XMLConfigurationTest {
"";
String expectedStr =
- "{\"addresses\":[]}";
+ "{\"addresses\":[\"\"]}";
Set forceList = new HashSet();
forceList.add("addresses");
@@ -1130,7 +1130,7 @@ public class XMLConfigurationTest {
"";
String expectedStr =
- "{\"addresses\":[]}";
+ "{\"addresses\":[\"\"]}";
Set forceList = new HashSet();
forceList.add("addresses");
@@ -1147,7 +1147,7 @@ public class XMLConfigurationTest {
@Test
public void testForceListWithLastElementAsEmptyTag(){
final String originalXml = "1";
- final String expectedJsonString = "{\"root\":{\"id\":[1]}}";
+ final String expectedJsonString = "{\"root\":{\"id\":[1,\"\"]}}";
HashSet forceListCandidates = new HashSet<>();
forceListCandidates.add("id");
@@ -1163,7 +1163,7 @@ public class XMLConfigurationTest {
@Test
public void testForceListWithFirstElementAsEmptyTag(){
final String originalXml = "1";
- final String expectedJsonString = "{\"root\":{\"id\":[1]}}";
+ final String expectedJsonString = "{\"root\":{\"id\":[\"\",1]}}";
HashSet forceListCandidates = new HashSet<>();
forceListCandidates.add("id");
@@ -1179,7 +1179,7 @@ public class XMLConfigurationTest {
@Test
public void testForceListWithMiddleElementAsEmptyTag(){
final String originalXml = "12";
- final String expectedJsonString = "{\"root\":{\"id\":[1,2]}}";
+ final String expectedJsonString = "{\"root\":{\"id\":[1,\"\",2]}}";
HashSet forceListCandidates = new HashSet<>();
forceListCandidates.add("id");
@@ -1195,8 +1195,7 @@ public class XMLConfigurationTest {
@Test
public void testForceListWithLastElementAsEmpty(){
final String originalXml = "1";
- final String expectedJsonString = "{\"root\":{\"id\":[1]}}";
-
+ final String expectedJsonString = "{\"root\":{\"id\":[1,\"\"]}}";
HashSet forceListCandidates = new HashSet<>();
forceListCandidates.add("id");
final JSONObject json = XML.toJSONObject(originalXml,
@@ -1210,7 +1209,7 @@ public class XMLConfigurationTest {
@Test
public void testForceListWithFirstElementAsEmpty(){
final String originalXml = "1";
- final String expectedJsonString = "{\"root\":{\"id\":[1]}}";
+ final String expectedJsonString = "{\"root\":{\"id\":[\"\",1]}}";
HashSet forceListCandidates = new HashSet<>();
forceListCandidates.add("id");
@@ -1225,7 +1224,7 @@ public class XMLConfigurationTest {
@Test
public void testForceListWithMiddleElementAsEmpty(){
final String originalXml = "12";
- final String expectedJsonString = "{\"root\":{\"id\":[1,2]}}";
+ final String expectedJsonString = "{\"root\":{\"id\":[1,\"\",2]}}";
HashSet forceListCandidates = new HashSet<>();
forceListCandidates.add("id");
@@ -1240,7 +1239,7 @@ public class XMLConfigurationTest {
@Test
public void testForceListEmptyAndEmptyTagsMixed(){
final String originalXml = "12";
- final String expectedJsonString = "{\"root\":{\"id\":[1,2]}}";
+ final String expectedJsonString = "{\"root\":{\"id\":[\"\",\"\",1,\"\",\"\",2]}}";
HashSet forceListCandidates = new HashSet<>();
forceListCandidates.add("id");
@@ -1252,6 +1251,50 @@ public class XMLConfigurationTest {
assertEquals(expectedJsonString, json.toString());
}
+ @Test
+ public void testForceListConsistencyWithDefault() {
+ final String originalXml = "01";
+ final String expectedJsonString = "{\"root\":{\"id\":[0,1,\"\",\"\"]}}";
+
+ // confirm expected result of default array-of-tags processing
+ JSONObject json = XML.toJSONObject(originalXml);
+ assertEquals(expectedJsonString, json.toString());
+
+ // confirm forceList array-of-tags processing is consistent with default processing
+ HashSet forceListCandidates = new HashSet<>();
+ forceListCandidates.add("id");
+ json = XML.toJSONObject(originalXml,
+ new XMLParserConfiguration()
+ .withForceList(forceListCandidates));
+ assertEquals(expectedJsonString, json.toString());
+ }
+
+ @Test
+ public void testForceListInitializesAnArrayWithAnEmptyElement(){
+ final String originalXml = "";
+ final String expectedJsonString = "{\"root\":{\"id\":[\"\"]}}";
+
+ HashSet forceListCandidates = new HashSet<>();
+ forceListCandidates.add("id");
+ JSONObject json = XML.toJSONObject(originalXml,
+ new XMLParserConfiguration()
+ .withForceList(forceListCandidates));
+ assertEquals(expectedJsonString, json.toString());
+ }
+
+ @Test
+ public void testForceListInitializesAnArrayWithAnEmptyTag(){
+ final String originalXml = "";
+ final String expectedJsonString = "{\"root\":{\"id\":[\"\"]}}";
+
+ HashSet forceListCandidates = new HashSet<>();
+ forceListCandidates.add("id");
+ JSONObject json = XML.toJSONObject(originalXml,
+ new XMLParserConfiguration()
+ .withForceList(forceListCandidates));
+ assertEquals(expectedJsonString, json.toString());
+ }
+
@Test
public void testMaxNestingDepthIsSet() {
XMLParserConfiguration xmlParserConfiguration = XMLParserConfiguration.ORIGINAL;