return null for jsonObj.getString(“key”);
JSONObject jsonObj = {"a":"1","b":null}
案例 1 :
jsonObj.getString("a") returns "1";
案例 2 :
jsonObj.getString("b") return nothing ;
案例3:
jsonObj.getString("c") throws error;
如何使案例2和3返回而不返回?null
"null"
JSONObject jsonObj = {"a":"1","b":null}
案例 1 :jsonObj.getString("a") returns "1";
案例 2 :jsonObj.getString("b") return nothing ;
案例3:jsonObj.getString("c") throws error;
如何使案例2和3返回而不返回?null
"null"
您可以使用 代替 。这样可以返回 a,JSONObject 将猜测正确的类型。甚至适用于 .请注意,Java 和 之间存在差异。get()
getString()
Object
null
null
org.json.JSONObject$Null
CASE 3 不返回“nothing”,它会引发异常。因此,您必须检查密钥是否存在()并返回null。has(key)
public static Object tryToGet(JSONObject jsonObj, String key) {
if (jsonObj.has(key))
return jsonObj.opt(key);
return null;
}
编辑
正如你所评论的,你只需要一个 or ,这会导致获取。请参阅修改后的代码: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));
}
}