0

我的 Json 字符串可能是以下两种格式之一,我不知道如何解析它们,因为我不知道它是 JsonArray 还是 JsonObject。

{"a":{"a":"a","a":"a","a":"a","a":"a"}}

{"a":[{"a":"a","b":"a","a":"a","a":"a"},{"b":"b","b":"b","b":"b","b":"b"}]}

谢谢。

4

3 回答 3

0

示例代码让您了解解析令牌流

这是用初始令牌调用的,

nextToken(t) 从流中检索下一个令牌。

parseJsonElement 是递归处理树的性质。

public Object parseJsonElement(Token t){
    if (t.isArrayStart()){
       // is an array so create list and put child elements into list
        List list = new List();
        t = nextToken(t);
        while (!t.isArrayEnd()){
           list.add(parseJsonElement(t));
        }
        return list;
    }else if (t.isObjectStart()){
       // is an object so return parsed object
        return parseJsonElement(t);
    }else // handle something else
}
于 2013-06-12T00:09:12.543 回答
0

假设您使用Gson解析 JSON,请构造一个JsonParser。其parse方法的返回类型是JsonElement。正如您通过阅读该类的方法列表所看到的,它具有告诉您它是对象、数组还是其他的方法。然后,您可以将对象转换为适当的子类(JsonObject, JsonArray,等等)或使用提供的便捷方法为您完成。

从那里,您可以检查对象或数组并获取属性、元素、原始值等。这些也将以 JsonElement 的形式出现。

于 2013-06-12T00:16:52.110 回答
0

如果您使用 JSONLib 或 Gson,这两个库都有一个名为 JsonElement 的抽象类。该类有能力回答您是 JsonObject 还是 JsonArray(#isJsonArray() #isJsonObject() 方法)。然后,您可以正确地投射它。

于 2013-06-12T00:19:59.863 回答