检查java中的JSON对象
我使用改型2获取一个JSON,如果键的值为空数组,它将携带object。例: 如果键,即地址具有值,则返回object 如果键,即地址没有任何值,则返回空数组 在我的POJO类中,我将我的Address类类型设置为object,以便改型可以解析JSON检查java中的JSON对象,java,android,json,retrofit2,jsonschema2pojo,Java,Android,Json,Retrofit2,Jsonschema2pojo,我使用改型2获取一个JSON,如果键的值为空数组,它将携带object。例: 如果键,即地址具有值,则返回object 如果键,即地址没有任何值,则返回空数组 在我的POJO类中,我将我的Address类类型设置为object,以便改型可以解析JSON public class Student { @SerializedName("name") @Expose private String name; @SerializedName("address") @Expose private Obj
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())
提前感谢。您可以通过
instanceof
检查对象是JosnObject
还是JsonArray
if (address instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) address;
}
else if (address instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) address;
}
您可以通过
instanceof
检查对象是JosnObject
还是JsonArray
if (address instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) address;
}
else if (address instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) address;
}
您可以进行json模式验证,在这里您必须定义json的所有类型和格式,然后使用 Jackson 2.x库和fge/json模式验证器。 参考链接了解更多详细信息
您可以进行json模式验证,在这里您必须定义json的所有内容、类型和格式,然后使用 Jackson 2.x库和fge/json模式验证器。 参考链接了解更多详细信息 我想知道为什么您的
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;
}
}
最后,您可以使用-
@SerializedName("address")
@Expose
private Address address;
在你的学生
课堂上
PS,服务器端问题必须由服务器端解决。我想知道为什么您的
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;
}
}
最后,您可以使用-
@SerializedName("address")
@Expose
private Address address;
在你的学生
课堂上
PS,服务器端的问题必须由服务器端解决。感谢大家。我在实例的帮助下找到了我的答案。 我必须将值转换为对象类型,即
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
}
谢谢大家。我在实例的帮助下找到了我的答案。 我必须将值转换为对象类型,即
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
}
您可以执行此操作(obj instanceof JSONObject)
或(obj instanceof JSONArray)
检查此操作是否有帮助(obj instanceof JSONObject)
或(obj instanceof JSONArray)
检查此操作是否有帮助