You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2017/01/03 15:54:14 UTC

svn commit: r1777150 - in /felix/trunk/converter/serializer/src: main/java/org/apache/felix/serializer/impl/json/JsonParser.java test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java

Author: davidb
Date: Tue Jan  3 15:54:14 2017
New Revision: 1777150

URL: http://svn.apache.org/viewvc?rev=1777150&view=rev
Log:
Felix Serializer - add support for doubles to JSON parser

Modified:
    felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java
    felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java

Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java?rev=1777150&r1=1777149&r2=1777150&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonParser.java Tue Jan  3 15:54:14 2017
@@ -35,7 +35,8 @@ import org.apache.felix.serializer.impl.
  * <ul>
  * <li>Object names are represented as a {@link String}.
  * <li>String values are represented as a {@link String}.
- * <li>Numeric values are represented as a {@link Long} (TODO support floats).
+ * <li>Numeric values without a decimal separator are represented as a {@link Long}.
+ * <li>Numeric values with a decimal separator are represented as a {@link Double}.
  * <li>Boolean values are represented as a {@link Boolean}.
  * <li>Nested JSON objects are parsed into a {@link java.util.Map Map&lt;String, Object&gt;}.
  * <li>JSON lists are parsed into a {@link java.util.List} which may contain any of the above values.
@@ -122,6 +123,9 @@ public class JsonParser {
         case 'N':
             return null;
         default:
+            if (jsonValue.contains(".")) {
+                return Double.parseDouble(jsonValue);
+            }
             return Long.parseLong(jsonValue);
         }
     }

Modified: felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java?rev=1777150&r1=1777149&r2=1777150&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java (original)
+++ felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java Tue Jan  3 15:54:14 2017
@@ -19,7 +19,6 @@ package org.apache.felix.serializer.impl
 import java.util.Arrays;
 import java.util.Map;
 
-import org.apache.felix.serializer.impl.json.JsonParser;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -39,10 +38,10 @@ public class JsonParserTest {
     @Test
     @SuppressWarnings("unchecked")
     public void testJsonComplex() {
-        String json = "{\"a\": [1,2,3,4,5], \"b\": {\"x\": 12, \"y\": 42, \"z\": {\"test test\": \"hello hello\"}}}";
+        String json = "{\"a\": [1,2,3,4,5], \"b\": {\"x\": 12, \"y\": 42, \"z\": {\"test test\": \"hello hello\"}}, \"ddd\": 12.34}";
         JsonParser jp = new JsonParser(json);
         Map<String, Object> m = jp.getParsed();
-        assertEquals(2, m.size());
+        assertEquals(3, m.size());
         assertEquals(Arrays.asList(1L, 2L, 3L, 4L, 5L), m.get("a"));
         Map<String, Object> mb = (Map<String, Object>) m.get("b");
         assertEquals(3, mb.size());
@@ -51,6 +50,7 @@ public class JsonParserTest {
         Map<String, Object> mz = (Map<String, Object>) mb.get("z");
         assertEquals(1, mz.size());
         assertEquals("hello hello", mz.get("test test"));
+        assertEquals(12.34d, ((Double) m.get("ddd")).doubleValue(), 0.0001d);
     }
 
     @Test