我需要解析一个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方法只是为每个方法创建一个新类。
答案 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...
}
}