Good catch. JSONSerializer was not checking for the "-" sign in the floating point exponent value. I have fixed this in both the 1.5.x and 2.0 branches. Unfortunately, we will probably not be doing a 1.5.3 release, so you may need to either build 1.5 from source or upgrade to 2.0 to get the fix. The relevant change is here:
Modified: pivot/branches/1.5.x/core/src/org/apache/pivot/json/JSONSerializer.java URL: http://svn.apache.org/viewvc/pivot/branches/1.5.x/core/src/org/apache/pivot/json/JSONSerializer.java?rev=1036009&r1=1036008&r2=1036009&view=diff ============================================================================== --- pivot/branches/1.5.x/core/src/org/apache/pivot/json/JSONSerializer.java (original) +++ pivot/branches/1.5.x/core/src/org/apache/pivot/json/JSONSerializer.java Wed Nov 17 12:44:53 2010 @@ -382,7 +382,7 @@ public class JSONSerializer implements S } while (c != -1 && (Character.isDigit(c) || c == '.' - || c == 'e' || c == 'E')) { + || c == 'e' || c == 'E' || c == '-')) { stringBuilder.append((char)c); integer &= !(c == '.'); c = reader.read(); G On Nov 17, 2010, at 2:07 AM, [email protected] wrote: > > Hi All, > > Below is example.when the number value was convertted to E*,JSONSerializer > will hit this trouble. > when I use arraylist convert map to json and would like re-convert to map > object,this error often to occurs. > Do you have any idea to solve it? > My Povit version is 1.5.2 > > |--------------------------------------------------------------------------| > |double a=1.000005; | > |double b=0.000005; | > |System.out.println(a); | > |System.out.println(b); | > |String testStr1=JSONSerializer.toString(a); | > |String testStr2=JSONSerializer.toString(b); | > |System.out.println(testStr1); | > |System.out.println(testStr2); | > |try { | > | System.out.println(JSONSerializer.parseDouble(testStr1)); | > | System.out.println(JSONSerializer.parseDouble(testStr2)); | > |} catch (SerializationException e) { | > | // TODO Auto-generated catch block | > | e.printStackTrace(); | > |} | > |1.000005 | > |5.0E-6 | > |1.000005 | > |5.0E-6 | > |1.000005 | > |Exception in thread "main" java.lang.NumberFormatException: For input | > |string: "5.0E" | > | at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) | > | at java.lang.Double.parseDouble(Unknown Source) | > | at org.apache.pivot.json.JSONSerializer.readNumber( | > |JSONSerializer.java:403) | > | at org.apache.pivot.json.JSONSerializer.readValue( | > |JSONSerializer.java:219) | > | at org.apache.pivot.json.JSONSerializer.readObject( | > |JSONSerializer.java:193) | > | at org.apache.pivot.json.JSONSerializer.parse( | > |JSONSerializer.java:810) | > | at org.apache.pivot.json.JSONSerializer.parseDouble( | > |JSONSerializer.java:906) | > | at testing.JsonTest.main(JsonTest.java:23) | > |--------------------------------------------------------------------------| > > > Best regards, > Ken Jiang > > ******************************************* > Murata Electronics Trading (Shenzhen) Co.,Ltd > Tel:86-755-82847251 > E-mail:[email protected] > ******************************************* >
