We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
@ZivYan #3347 #3093 建议在JSONObject.java中对containsKey(Object key)和get(Object key)方法进行如下调整以更好的支持key为number、char和boolean类型的业务 修改内容如下:
private static final Set<Class> KEY_TYPES = new HashSet(Arrays.asList(Character.class,Boolean.class)); public boolean containsKey(Object key) { boolean result = map.containsKey(key); if (!result) { if(key instanceof Number || KEY_TYPES.contains(key.getClass())) { result = map.containsKey(key.toString()); } } return result; } public Object get(Object key) { Object val = map.get(key); if (val == null) { if(key instanceof Number || KEY_TYPES.contains(key.getClass())) { val = map.get(key.toString()); } } return val; } 测试代码如下: @RunWith(Theories.class) public class JSONTest { @DataPoint public static Object i = 1; @DataPoint public static Object s = "hello"; @DataPoint public static Object b = true; @DataPoint public static Object c = 'a'; @DataPoint public static Object f = 3.14; @Theory public void testToJSONObject(Object key,Object value) { toJSON(key,value,"-result:%b;key:%s;value:%s"); } public void toJSON(Object key,Object value,String msg) { Map<Object,Object> map = new HashMap<Object,Object>(); map.put(key, value); JSONObject obj = (JSONObject)JSON.toJSON(map); boolean result = obj.containsKey(key)&&obj.containsValue(value); if(result) { System.out.println(String.format(msg, result, key.getClass().getSimpleName(), value.getClass().getSimpleName())); }else { System.err.println(String.format(msg, result, String.valueOf(obj.containsKey(key)), String.valueOf(obj.containsValue(value)))); System.err.println(String.format(msg, result, key.getClass().getSimpleName(), value.getClass().getSimpleName())); } Assert.assertTrue(result); } }
测试结果如下:
-result:true;key:Boolean;value:Boolean -result:true;key:Boolean;value:Character -result:true;key:Boolean;value:Double -result:true;key:Boolean;value:Integer -result:true;key:Boolean;value:String -result:true;key:Character;value:Boolean -result:true;key:Character;value:Character -result:true;key:Character;value:Double -result:true;key:Character;value:Integer -result:true;key:Character;value:String -result:true;key:Double;value:Boolean -result:true;key:Double;value:Character -result:true;key:Double;value:Double -result:true;key:Double;value:Integer -result:true;key:Double;value:String -result:true;key:Integer;value:Boolean -result:true;key:Integer;value:Character -result:true;key:Integer;value:Double -result:true;key:Integer;value:Integer -result:true;key:Integer;value:String -result:true;key:String;value:Boolean -result:true;key:String;value:Character -result:true;key:String;value:Double -result:true;key:String;value:Integer -result:true;key:String;value:String
The text was updated successfully, but these errors were encountered:
仔细想想,还是用这种写法更为简单清晰:
public Object get(Object key) { return map.get(key==null?key:key.toString()); } public boolean containsKey(Object key) { return map.containsKey(key==null?key:key.toString()); }
Sorry, something went wrong.
545a06b
No branches or pull requests
@ZivYan #3347 #3093
建议在JSONObject.java中对containsKey(Object key)和get(Object key)方法进行如下调整以更好的支持key为number、char和boolean类型的业务
修改内容如下:
测试结果如下:
-result:true;key:Boolean;value:Boolean
-result:true;key:Boolean;value:Character
-result:true;key:Boolean;value:Double
-result:true;key:Boolean;value:Integer
-result:true;key:Boolean;value:String
-result:true;key:Character;value:Boolean
-result:true;key:Character;value:Character
-result:true;key:Character;value:Double
-result:true;key:Character;value:Integer
-result:true;key:Character;value:String
-result:true;key:Double;value:Boolean
-result:true;key:Double;value:Character
-result:true;key:Double;value:Double
-result:true;key:Double;value:Integer
-result:true;key:Double;value:String
-result:true;key:Integer;value:Boolean
-result:true;key:Integer;value:Character
-result:true;key:Integer;value:Double
-result:true;key:Integer;value:Integer
-result:true;key:Integer;value:String
-result:true;key:String;value:Boolean
-result:true;key:String;value:Character
-result:true;key:String;value:Double
-result:true;key:String;value:Integer
-result:true;key:String;value:String
The text was updated successfully, but these errors were encountered: