2017-03-20 60 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 
}