确定Object是数组还是字符串

时间:2016-12-09 19:24:58

标签: java android arrays json android-json

我从服务器返回了一些JSON数据。

有时数据是其他时间的数组,它返回一个空字符串(是的,我知道它应该返回一个空数组)。
所以如果类型是String的实例,我需要检查FIRST;如果是这样,我会忽略它并继续生活 否则我需要阅读这些值。

如何确定对象是否为String

我看过这个SO question和其他一些,但我认为它并不适合我的情况。
我觉得我很接近,但我的代码失败表示我无法将一个对象强制转换为字符串。
但是,如果我将它转换为字符串...那么它将始终是一个字符串的实例。无限循环。

这是我到目前为止所处的位置。

private void myMethod(JSONObject data){
    if (data.has("Notes")){
        Object json = new JSONTokener(data.getJSONObject("Notes")).nextValue();

        if(data.getJSONObject("Notes") instanceof String) {
            JSONArray array = data.getJSONObject("Notes").getJSONArray("Note");
            //do all the array stuff
        }
    }
}

带阵列示例的JSON

{ "Data": {
        "key": "A value",
        "another key": "some value",
        "Notes": {
            "Note": ["1", "2", "3", "4"]
        } } }

没有数组示例的JSON

{ "Data": {
        "key": "A value",
        "another key": "some value",
        "Notes": ""
    } }

1 个答案:

答案 0 :(得分:1)

你有这个

Object json = new JSONTokener(data.getJSONObject("Notes")).nextValue();

但你在这里没有使用json。您已经第二次提取getJSONObject("Notes")

if(data.getJSONObject("Notes") instanceof String) {

尝试

if(json instanceof String) {

如果这不起作用,我试试

JSONObject notesObj = data.optJSONObject("Notes");
if (noteObj == null) {
    // It might be a string, but it was not an object
}

我不确定如果您只是对作为对象的值使用getString("Notes")会发生什么。可能toString它,但我最近还没有尝试过记住它。