[英]How to test if a JSONObject is null or doesn't exist
我有一組JSONObject
值,我從服務器接收並對其進行操作。 大多數情況下,我得到一個帶有值的JSONObject
(比如說統計數據),有時,它返回一個帶有代碼和錯誤描述的Error
對象。
我如何構造我的代碼,以便它在返回錯誤時不會中斷。 我以為我可以做到這一點,但沒有用。
public void processResult(JSONObject result) {
try {
if(result.getJSONObject(ERROR) != null ){
JSONObject error = result.getJSONObject(ERROR);
String error_detail = error.getString(DESCRIPTION);
if(!error_detail.equals(null)) {
//show error login here
}
finish();
}
else {
JSONObject info = result.getJSONObject(STATISTICS);
String stats = info.getString("production Stats"));
}
}
}
使用.has(String)
和.isNull(String)
保守的用法可能是;
if (record.has("my_object_name") && !record.isNull("my_object_name")) {
// Do something with object.
}
可能有點晚(這是肯定的),但將其發布給未來的讀者
您可以使用不會拋出任何異常的JSONObject optJSONObject (String name)
如果存在並且是 JSONObject,則返回按名稱映射的值,否則返回 null。
所以你可以做
JSONObject obj = null;
if( (obj = result.optJSONObject("ERROR"))!=null ){
// it's an error , now you can fetch the error object values from obj
}
或者如果您只想測試無效性而不獲取值,那么
if( result.optJSONObject("ERROR")!=null ){
// error object found
}
有整個系列的opt 函數,它們要么返回null
,要么您也可以使用重載版本使它們返回任何預定義的值。 例如
String optString (String name, String fallback)
如果存在,則返回按名稱映射的值,必要時強制它,如果不存在此類映射,則回退。
其中coercing
意味着,它將嘗試將值轉換為字符串類型
@TheMonkeyMan 答案的修改版本,以消除冗余查找
public void processResult(JSONObject result) {
JSONObject obj = null;
if( (obj = result.optJSONObject("ERROR"))!=null ){
//^^^^ either assign null or jsonobject to obj
// if not null then found error object , execute if body
String error_detail = obj.optString("DESCRIPTION","Something went wrong");
//either show error message from server or default string as "Something went wrong"
finish(); // kill the current activity
}
else if( (obj = result.optJSONObject("STATISTICS"))!=null ){
String stats = obj.optString("Production Stats");
//Do something
}
else
{
throw new Exception("Could not parse JSON Object!");
}
}
在 JSONObject 中,您可以使用“Has”方法來確定密鑰。
我不知道這是否可行,但它看起來可信。
public void processResult(JSONObject result) {
if(result.has("ERROR"))
{
JSONObject error = result.getJSONObject("ERROR")
String error_detail = error.getString("DESCRIPTION");
if(error_detail != null)
{
//Show Error Login
finish();
}
}
else if(result.has("STATISTICS"))
{
JSONObject info = result.getJSONObject("STATISTICS");
String stats = info.getString("Production Stats");
//Do something
}
else
{
throw new Exception("Could not parse JSON Object!");
}
}
有時,使用 NULL 對象比使用 Java 的 null 值更方便,也更不模糊。
JSONObject.NULL.equals(null) 返回真。
JSONObject.NULL.toString() 返回“null”。
例子:
System.out.println(test.get("地址").equals(null)); // 首選方式 System.out.println(test.getString("address").equals("null"));
來源——JSONObject oracle 文檔
只是一個說明:
使用 EE8 json 規范,我可以進行異常安全的獲取:
result.asJsonObject().getString("ERROR", null);
但是,如果我想做一個檢查,我可以這樣做:
result.asJsonObject().get("ERROR").equals(JsonValue.NULL)
如果在您的代碼中的任何一點, org.json.JSONObject json_object
變為null
並且您希望避免NullPointerException
(java.lang.NullPointerException),請按如下方式進行檢查:
if(json_object == null) {
System.out.println("json_object is found as null");
}
else {
System.out.println("json_object is found as not null");
}
如果在任何情況下,您的 jsonobject 為空。 然后使用此語句檢查 jsonobject 是否為空。
if (!obj.get("data").isJsonNull()){
//Not Null
}else{
//Null
}
要檢查 jsonobject 是否存在,請使用 .has:
if (!obj.has("data")){
//Not Exist
}else{
//Exist
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.