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);