Repository: incubator-weex
Updated Branches:
  refs/heads/master fb6010943 -> a2f1f13a9


[WEEX-198][android]FastJSON parse will convert double to bigDecimal, use double 
when in double precision

[WEEX-198][android]FastJSON parse will convert double to bigDecimal, use double 
when in double precision

[WEEX-198][android]FastJSON parse will convert double to bigDecimal, use double 
when in double precision
close #990


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/a2f1f13a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/a2f1f13a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/a2f1f13a

Branch: refs/heads/master
Commit: a2f1f13a97c7bf67635c26d6fa38fb87ffadc1dc
Parents: fb60109
Author: jianbai.gbj <jianbai....@alibaba-inc.com>
Authored: Wed Jan 17 17:58:04 2018 +0800
Committer: acton393 <zhangxing610...@gmail.com>
Committed: Thu Jan 18 14:28:31 2018 +0800

----------------------------------------------------------------------
 .../main/java/com/taobao/weex/wson/Wson.java    | 27 +++++++++++++++++---
 1 file changed, 23 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a2f1f13a/android/sdk/src/main/java/com/taobao/weex/wson/Wson.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/wson/Wson.java 
b/android/sdk/src/main/java/com/taobao/weex/wson/Wson.java
index c9516a7..5741f8a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/wson/Wson.java
+++ b/android/sdk/src/main/java/com/taobao/weex/wson/Wson.java
@@ -21,6 +21,7 @@ package com.taobao.weex.wson;
 
 import android.support.v4.util.LruCache;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.taobao.weex.utils.WXLogUtils;
@@ -325,8 +326,15 @@ public class Wson {
             return  number;
         }
 
-        private  final double readDouble(){
+        private  final Object readDouble(){
             double number = Double.longBitsToDouble(readLong());
+            if(number > Integer.MAX_VALUE){
+                long numberLong = (long) number;
+                double doubleLong = (numberLong);
+                if(number - doubleLong < Double.MIN_NORMAL){
+                    return numberLong;
+                }
+            }
             return  number;
         }
 
@@ -488,7 +496,11 @@ public class Wson {
                     writeByte(NULL_TYPE);
                 }else {
                     refs.add(object);
-                    writeMap(toMap(object));
+                    if(object.getClass().isEnum()){
+                        writeObject(JSON.toJSONString(object));
+                    }else{
+                        writeMap(toMap(object));
+                    }
                     refs.remove(refs.size()-1);
                 }
                 return;
@@ -534,8 +546,15 @@ public class Wson {
             }
 
             if(number instanceof BigDecimal){
-                writeByte(NUMBER_BIG_DECIMAL_TYPE);
-                writeUTF16String(number.toString());
+                String value = number.toString();
+                double doubleValue = number.doubleValue();
+                if(value.equals(Double.toString(doubleValue))){
+                    writeByte(NUMBER_DOUBLE_TYPE);
+                    writeDouble(doubleValue);
+                }else {
+                    writeByte(NUMBER_BIG_DECIMAL_TYPE);
+                    writeUTF16String(value);
+                }
                 return;
             }
             writeByte(STRING_TYPE);

Reply via email to