2011-05-03 93 views
0

的轉換I有三個陣列(在相同的大小):提高陣反射調用

  1. JSONArray jsonArr其中包含許多字符串。
  2. Class<?> classArr[]其中包含參數類型。
  3. Object objArr[]包含什麼,但(但我們會做滿了,我保證)

我需要每個字符串jsonArr從同一指數classArr轉換成的類型和將結果對象放在objArr的適當索引中。

例如:

Array \ index | 1  | 2  | 3  | 4 
--------------+---------+---------+---------+------- 
jsonArr  | "1"  | "false" | "false" | "2" 
classArr  | int  | boolean | String | char 

應導致:

objArr  | 1  | false | "false" | 2 

我目前使用下面的方法(在爲每個對象的循環)來轉換的參數和創建objArray

if (classArr[i].equals(int.class)) 
    objArr[i] = Integer.parseInt(jsonArr.get(i)); 
else if (classArr[i].equals(boolean.class)) 
    objArr[i] = Boolean.parseBoolean(jsonArr.get(i)); 
.... 

此方法適用於我,但我不知道 - 有沒有更好的方法將JSONArray轉換爲列表中的類型,或者我沒有比if-else方法更好的選擇?

回答

1

一種替代方法是使用JSON的對象類型功能。而不是指定所有字符串的JSON數組,將值定義爲數字,布爾等等。通過這樣做,您使用的JSON庫(我假設來自json.org的Java API)將能夠自動轉換將這些值轉換爲適當的定義。

下面是一個例子:

// JSON String: [1, false, "false", "2"] rather than ["1", "false", "false", "2"] 
String jsonEx = "[1,false,\"false\",\"2\"]"; 
// convert to JSONArray 
JSONArray array = new JSONArray(jsonEx); 

// print out values and types 
for (int i = 0; i < array.length(); i++) { 
    Object o = array.get(i); 
    System.out.printf("%-8s\t:%s\n", o,o.getClass()); 
} 

如果你運行這段代碼,你會得到下面的輸出:

1   :class java.lang.Integer 
false  :class java.lang.Boolean 
false  :class java.lang.String 
2   :class java.lang.String 

正如你可以看到,該庫正確轉換所有數據類型的不同之處爲預期的字符。原因是JSON沒有辦法定義字符類型與標準字符串。如果你能解決這個限制,那麼這種方法應該使你的應用程序更簡單,更容易維護。

此方法的另一個好處是可以在JSON字符串和包含Object數組屬性的Java對象之間進行直接轉換時使用它。

+0

謝謝,我以前只用String-in-json-string工作,我完全忘記了這一點。在這個項目中,我遇到了這個問題並不重要 - 你提醒了我重要的一點。再次感謝! – MByD 2011-05-03 20:14:55

+0

另外,現在你發現了,我覺得很愚蠢:) – MByD 2011-05-03 20:15:44