解析复杂的JSON文件

时间:2015-04-01 11:29:52

标签: java json parsing gwt

我需要解析一个JSON文件并将数据放入HTML表中。我在这个应用程序中使用GWT,数据应该从服务器端的文件中读取,并在页面加载时传递给客户端。

文件中JSONObjects的格式如下:

{  
"Object 1": [
{ "value1": [ "subKey1", "subValue2" ], "value2": "val", "value3": { "key1": val1, "key2": val2, "key3": val3} },
{ "value2": [ "subKey1", "subValue2" ], "value2": "val", "value3": { "key1": val1, "key2": val2, "key3": val3} },
....
....
],

"Object 2": [
{ "value1": [ "subKey1", "subValue2" ], "value2": "val", "value3": { "key1": val1, "key2": val2, "key3": val3} },
{ "value2": [ "subKey1", "subValue2" ], "value2": "val", "value3": { "key1": val1, "key2": val2, "key3": val3} },
....
....
],
 ....

}

到目前为止,我只进行了简单的JSON解析。我在这里遇到的问题是我正在使用的数据具有每个对象的唯一名称,所以我似乎无法将它们解析为JSONObjects数组。

我试图用这种方式解析它们(使用JSON简单),但是我抛出了一个错误。

    try {
        JSONParser parser = new JSONParser();
        JSONObject obj;
            obj = (JSONObject) parser.parse(new FileReader("file.json"));

        JSONArray array = new JSONArray();
        array.add(obj.get("Object1"));
        array.add(obj.get("Object2"));
        array.add(obj.get("Object3"));
        array.add(obj.get("Object4"));

        JSONObject jo;

        for (Object o : array) {
            jo = (JSONObject) o;
        }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } 

但这会引发错误:

    org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject

我理解的另一种方法是为对象创建一个POJO类,但由于每个JSONObject都有不同的标识符,这是否意味着每个对象必须有自己唯一的类?我使用的一些JSON2Java方法只是为每个方法创建一个新类。

1 个答案:

答案 0 :(得分:1)

您可以在投射之前检查对象的实例:

for (Object obj : array) {
    if (obj instanceof JSONArray) {
       // It's an array
       yourJsonArray = (JSONArray)obj;
    } else if (obj instanceof JSONObject) {
       // It's an object
       yourJsonObject = (JSONObject)obj;
    } else {
       // It's string, number...
    }
 }