2017-03-20 107 views
1

我正在使用retrofit 2來提取JSON,如果該鍵具有值,則會攜帶對象,否則爲空數組。例如:在java中檢查JSON對象

如果即地址主要有值返回對象

{ 
    "student": { 
     "name": "Some name", 
     "address": { 
      "house": "5", 
      "road": "3" 
     } 
    } 
} 

如果即地址關鍵不具有任何價值,它返回空數組

{ 
    "student": { 
     "name": "Some name", 
     "address": [] 
    } 
} 

在我的POJO類中,我將Address類的類型設置爲對象,以便翻新可以解析JSON。

public class Student { 

@SerializedName("name") 
@Expose 
private String name; 
@SerializedName("address") 
@Expose 
private Object address; 

public String getName() { 
return name; 
} 

public void setName(String name) { 
this.name = name; 
} 

public Object getAddress() { 
return address; 
} 

public void setAddress(Object address) { 
this.address = address; 
} 

} 

現在我怎樣才能檢查地址類型是對象或數組?

我試過用isArray(),但沒有找到結果。

if(obj.getclass().isArray()) 

在此先感謝。

+1

你可以這樣做 '(OBJ instanceof JSONObject)'或'(obj instanceof JSONArray)' –

+0

檢查是否可以幫助您http://stackoverflow.com/a/13100642/2116420 – Naz141

回答

0

您可以通過instanceof檢查對象是JosnObjectJsonArray

if (address instanceof JSONObject) { 
JSONObject jsonObject = (JSONObject) address; 
} 
else if (address instanceof JSONArray) { 
JSONArray jsonArray = (JSONArray) address; 
} 
0

我不知道爲什麼你的json是不是一致?我的意思是,如果在地址沒有價值它不應該是一個JSONArray

相反,它應該是這樣 -

"address": { 
    "house": "", 
    "road": "" 
} 

它將容易解析,如果你正在做的象上面 - 現在你Pojo會 -

public class Address { 

@SerializedName("house") 
@Expose 
private String house; 
@SerializedName("road") 
@Expose 
private String road; 

public String getHouse() { 
return house; 
} 

public void setHouse(String house) { 
this.house = house; 
} 

public String getRoad() { 
return road; 
} 

public void setRoad(String road) { 
this.road = road; 
} 

} 

最後,你可以使用獲得Address -

@SerializedName("address") 
@Expose 
private Address address; 

Student

PS,
服務器端的問題,必須由服務器端進行固定。

0

謝謝大家。我在instanceof的幫助下找到了我的答案。 而不是直接檢查地址 obj的,我要的價值爲對象類型,即

Gson gson = new GsonBuilder().serializeNulls().setLenient().create(); 
String jsonStr = gson.toJson(obj.getAddress()); 
Object json = new JSONTokener(jsonStr).nextValue(); 

轉換,然後我可以用JSONObject的檢查

if (json instanceof JSONObject) { 
// Object 
}else{ 
// Array 
}