Author: davidb
Date: Thu May 25 15:20:26 2017
New Revision: 1796155
URL: http://svn.apache.org/viewvc?rev=1796155&view=rev
Log:
Add support for top-level lists to the JSON Parser.
Usage can be found in the new unit tests.
Modified:
felix/trunk/utils/src/main/java/org/apache/felix/utils/json/JSONParser.java
felix/trunk/utils/src/test/java/org/apache/felix/utils/json/JSONParserTest.java
Modified:
felix/trunk/utils/src/main/java/org/apache/felix/utils/json/JSONParser.java
URL:
http://svn.apache.org/viewvc/felix/trunk/utils/src/main/java/org/apache/felix/utils/json/JSONParser.java?rev=1796155&r1=1796154&r2=1796155&view=diff
==============================================================================
--- felix/trunk/utils/src/main/java/org/apache/felix/utils/json/JSONParser.java
(original)
+++ felix/trunk/utils/src/main/java/org/apache/felix/utils/json/JSONParser.java
Thu May 25 15:20:26 2017
@@ -72,7 +72,7 @@ public class JSONParser {
}
}
- private final Map<String, Object> parsed;
+ private final Object parsed;
public JSONParser(CharSequence json) {
String str = json.toString();
@@ -84,8 +84,20 @@ public class JSONParser {
this(readStreamAsString(is));
}
+ @SuppressWarnings("unchecked")
public Map<String, Object> getParsed() {
- return parsed;
+ if (parsed instanceof Map)
+ return (Map<String, Object>) parsed;
+ else
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Object> getParsedList() {
+ if (parsed instanceof List)
+ return (List<Object>) parsed;
+ else
+ return null;
}
private static Pair<String, Object> parseKeyValue(String jsonKeyValue) {
@@ -167,8 +179,16 @@ public class JSONParser {
return sb.toString();
}
- private static Map<String, Object> parseObject(String jsonObject) {
- if (!(jsonObject.startsWith("{") && jsonObject.endsWith("}")))
+ private static Object parseObject(String jsonObject) {
+ if (jsonObject.startsWith("[") && jsonObject.endsWith("]")) {
+ // It's a list
+ List<Object> values = new ArrayList<Object>();
+
+ for(String val : parseListValuesRaw(jsonObject)) {
+ values.add(parseValue(val));
+ }
+ return values;
+ } else if (!(jsonObject.startsWith("{") && jsonObject.endsWith("}")))
throw new IllegalArgumentException("Malformatted JSON object: " +
jsonObject);
Map<String, Object> values = new HashMap<String, Object>();
Modified:
felix/trunk/utils/src/test/java/org/apache/felix/utils/json/JSONParserTest.java
URL:
http://svn.apache.org/viewvc/felix/trunk/utils/src/test/java/org/apache/felix/utils/json/JSONParserTest.java?rev=1796155&r1=1796154&r2=1796155&view=diff
==============================================================================
---
felix/trunk/utils/src/test/java/org/apache/felix/utils/json/JSONParserTest.java
(original)
+++
felix/trunk/utils/src/test/java/org/apache/felix/utils/json/JSONParserTest.java
Thu May 25 15:20:26 2017
@@ -20,11 +20,13 @@ import java.io.StringWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class JSONParserTest {
@@ -103,4 +105,41 @@ public class JSONParserTest {
assertEquals("\r\r\r", parsed.get("\n\n\n"));
assertEquals("\u2202", parsed.get("!\u2708!\u2708!"));
}
+
+ @Test
+ public void testTopLevelArraySimple() throws Exception {
+ String s = "[\"a one\", 5, true]";
+
+ JSONParser jp = new JSONParser(s);
+ List<Object> res = jp.getParsedList();
+ assertEquals(3, res.size());
+ assertEquals("a one", res.get(0));
+ assertEquals(5L, res.get(1));
+ assertEquals(true, res.get(2));
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Test
+ public void testTopLevelArrayComplex() throws Exception{
+ String s = "[{\"key1\": 123, \"key2\": 321}, [[true, false], \"hi
\"]]";
+
+ JSONParser jp = new JSONParser(s);
+ List<Object> res = jp.getParsedList();
+ assertEquals(2, res.size());
+
+ Map m = (Map) res.get(0);
+ assertEquals(2, m.size());
+ assertEquals(123L, m.get("key1"));
+ assertEquals(321L, m.get("key2"));
+
+ List l = (List) res.get(1);
+ assertEquals(2, l.size());
+
+ List l2 = (List) l.get(0);
+ assertEquals(2, l2.size());
+ assertTrue((Boolean) l2.get(0));
+ assertFalse((Boolean) l2.get(1));
+
+ assertEquals("hi ", l.get(1));
+ }
}