Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查java中的JSON对象_Java_Android_Json_Retrofit2_Jsonschema2pojo - Fatal编程技术网

检查java中的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

我使用改型2获取一个JSON,如果键的值为空数组,它将携带object。例:

如果键,即地址具有值,则返回object

如果键,即地址没有任何值,则返回空数组

在我的POJO类中,我将我的Address类类型设置为object,以便改型可以解析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())

提前感谢。

您可以通过
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)
检查此操作是否有帮助