你可以用get()
而不是getString()
.这样Object
返回一个,JSONObject将猜测正确的类型.甚至可以工作null
.请注意,Java null
和org.json.JSONObject$Null
.之间存在差异.
CASE 3不会返回"无",它会抛出异常.所以你必须检查exists(has(key)
)的键并返回null.
public static Object tryToGet(JSONObject jsonObj, String key) { if (jsonObj.has(key)) return jsonObj.opt(key); return null; }
编辑
正如您所评论的那样,您只需要一个String
或者null
,它可以optString(key, default)
用于获取.查看修改后的代码:
package test; import org.json.JSONObject; public class Test { public static void main(String[] args) { // Does not work // JSONObject jsonObj = {"a":"1","b":null}; JSONObject jsonObj = new JSONObject("{\"a\":\"1\",\"b\":null,\"d\":1}"); printValueAndType(getOrNull(jsonObj, "a")); // >>> 1 -> class java.lang.String printValueAndType(getOrNull(jsonObj, "b")); // >>> null -> class org.json.JSONObject$Null printValueAndType(getOrNull(jsonObj, "d")); // >>> 1 -> class java.lang.Integer printValueAndType(getOrNull(jsonObj, "c")); // >>> null -> null // throws org.json.JSONException: JSONObject["c"] not found. without a check } public static Object getOrNull(JSONObject jsonObj, String key) { return jsonObj.optString(key, null); } public static void printValueAndType(Object obj){ System.out.println(obj + " -> " + ((obj != null) ? obj.getClass() : null)); } }