修改org.json.JSONObject的stringToValue,返回能容纳整数的最小包装类型而不是Integer。
(修正数据交互工具中当对象包含属性的类型为类型为byte/short时反射调用field.set(bean,obj)引发异常。)
黑色粗体斜体为增加部分,修改后代码如下:
static public Object stringToValue(String s) { if (s.equals("")) { return s; } if (s.equalsIgnoreCase("true")) { return Boolean.TRUE; } if (s.equalsIgnoreCase("false")) { return Boolean.FALSE; } if (s.equalsIgnoreCase("null")) { return JSONObject.NULL; } /* * If it might be a number,try converting it. * We support the non-standard 0x- convention. * If a number cannot be produced,then the value will just * be a string. Note that the 0x-,plus,and implied string * conventions are non-standard. A JSON parser may accept * non-JSON forms as long as it accepts all correct JSON forms. */ char b = s.charAt(0); if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+') { if (b == '0' && s.length() > 2 && (s.charAt(1) == 'x' || s.charAt(1) == 'X')) { try { return new Integer(Integer.parseInt(s.substring(2),16)); } catch (Exception ignore) { } } try { if (s.indexOf('.') > -1 || s.indexOf('e') > -1 || s.indexOf('E') > -1) { return Double.valueOf(s); } else { Long myLong = new Long(s); if (myLong.shortValue() == myLong.byteValue()) { return new Byte(myLong.byteValue()); } if (myLong.intValue() == myLong.shortValue()) { return new Short(myLong.shortValue()); } if (myLong.longValue() == myLong.intValue()) { return new Integer(myLong.intValue()); } else { return myLong; } } } catch (Exception ignore) { } } return s; }
还有org.json.JSONObject中增加:
/** * Put a key/int pair in the JSONObject. * * @param key A key string. * @param value An int which is the value. * @return this. * @throws JSONException If the key is null. */ public JSONObject put(String key,byte value) throws JSONException { put(key,new Byte(value)); return this; } /** * Put a key/int pair in the JSONObject. * * @param key A key string. * @param value An int which is the value. * @return this. * @throws JSONException If the key is null. */ public JSONObject put(String key,short value) throws JSONException { put(key,new Short(value)); return this; } (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|