解析Json String,它可以包含JsonArray或只包含JsonObject

时间:2013-06-11 23:58:41

标签: java json

我的Json字符串可能是以下两种格式之一,我想知道如何解析它们,因为我不知道它是Json数组还是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"}]}

感谢。

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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