2015-04-01 105 views
0

我需要解析JSON文件並將數據放入HTML表格中。我爲這個應用程序使用GWT,數據將從服務器端的文件中讀取,並在頁面加載時傳遞給客戶端。是解析複雜的JSON文件

的文件中的一個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 

從我的理解另一種方法是創建一個對象,但因爲每個的JSONObject有不同標識的POJO類,這是否意味着每個對象必須它自己獨特的課程?我使用的一些JSON2Java方法只是爲它們中的每一個創建一個新類。

+0

爲什麼不直接傳遞JSON的GWT應用程序?爲什麼解析它的服務器端? – 2015-04-01 11:33:57

+0

那也是另一個選擇,我只是想知道如何將數據結構化爲表格。我想爲數據做一個POJO會讓它更容易。 – GreenGodot 2015-04-01 11:37:49

+1

JSON _is_ JavaScript!在JavaScript中處理它比在Java中處理容易1000倍。好的,也許這有點誇張。但是在客戶端免費解析**,因爲它已經是JavaScript對象了 - 名字中的線索......我會從[閱讀教程]開始(http://www.gwtproject.org/doc/latest /tutorial/JSON.html) - 覆蓋類型真的很神奇。 – 2015-04-01 11:39:57

回答

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... 
    } 
} 
+1

我認爲這是一個XY問題 - 因爲OP試圖解析JSON服務器端,通過RPC將它發送到GWT前端;即對其進行反序列化,將其序列化,然後再次對其進行反序列化。雖然這無疑是解決OP所遇到的確切問題的一種方法,但我不相信這是對潛在問題的正確答案。 – 2015-04-01 11:45:38

+1

@BoristheSpider你是對的!也許它不能解決主要問題,但它應該解決他嘗試的例外問題。 – Rami 2015-04-01 12:09:57