2013-07-11 107 views
0

我有一些Java類像MyClass1MyClass2其狀態保存在JSON對象:JSON到Java的泛型解析對象

"MyClass1":[{"var1":"value1","var2":"value2"},{"var1":"value3","var2":"value4"}] 
"MyClass2":{"var11":"value5","var22":"value6"} 

現在我想編寫一個通用的方法來解析JSON對象爲Java對象使用net.sf.json尋求幫助。

讓我們從MyClass1開始 - 我想創建一個包含json中描述的2個對象的List<MyClass1>

1: public static <T> List<T> loadBEsFromJson(final File jsonInputFile, final Class<T> tClazz) throws IOException { 
2: final List<T> result = new ArrayList<T>(); 

3: final JSONObject input = parseFileToJSONObject(jsonInputFile); 

4: if (input.containsKey(tClazz.toString())) { 
5:  JSONArray arr = input.getJSONArray(tClazz.toString()); //VALID??? 
6:  for (int i = 0; i < arr.size(); i++) { 
7:   JSONObject obj = arr.getJSONObject(i); 
8:   //now, how do I create an Object of type T? 
9:  } 
10: } 

11: return result; 
12:} 

我的第一個問題是 - 第5行有效嗎? 我的第二個問題是在第8行:在某個時刻,我想創建一個類型爲T的對象,這有可能嗎?

非常感謝您的幫助!編輯: 也許這就是我要找的。 我會很感激,如果你也可以評論編輯。

4: if (input.containsKey(tClazz.getSimpleName())) { 
5:  JSONArray arr = input.getJSONArray(tClazz.getSimpleName()); //VALID??? 
6:  for (int i = 0; i < arr.size(); i++) { 
7:   JSONObject obj = arr.getJSONObject(i); 
8:   T myObj = MyFactory.newObj(tClazz); 
      //now write all fields using myObj.getAllFields() or something 
9:  } 
10: } 

11: return result; 
12:} 

回答

1

使用GSON:

Gson gson = new Gson(); 
BufferedReader br = new BufferedReader(new FileReader("c:\\file.json")); 
//convert the json string back to object 
DataObject obj = gson.fromJson(br, DataObject.class); 
+0

這是非常有幫助的,但不是我的情況,我還是謝謝你 – user1414745