1

我正在使用改造 2 获取 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())

提前致谢。

4

4 回答 4

0

谢谢大家。我在instanceof的帮助下找到了答案。而不是直接检查地址obj,我必须将值转换为Object类型,即

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
}
于 2017-03-20T07:38:53.627 回答
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,
服务器端问题必须由服务器端解决。

于 2017-03-20T06:22:42.227 回答
0

您可以检查instanceof 是对象是JosnObject还是JsonArray

if (address instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) address;
}
else  if (address instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) address;
}
于 2017-03-20T06:07:07.123 回答
0

您可以进行 json 模式验证,您必须定义所有重新分级 json 的类型和格式,然后使用 Jackson 2.x 库和 fge/json-schema-validator 验证您的 json。

参考链接了解更多详情。

http://wilddiary.com/validate-json-against-schema-in-java/

于 2017-03-20T06:07:31.920 回答