2013-05-02 62 views
1

我很努力地將一些現有的代碼段與通過JSON負載接受輸入的服務器集成在一起。我交給了一個JSON對象,並且我需要構造一個表示鍵值對的Map,其中值採用合理的預期類型。 org.json解析器似乎適用於除JSONArray之外的所有情況。將JSONArray轉換爲適當類型的Java數組

我可以看到,從JSONArray構建一個String []是很容易的...只要您知道String []是您需要的。然而,我也交給數組的雙打,整數,沒有什麼可以區分它們。我需要弄清楚類型,並創建一個適當類型的數組。

我試圖從陣列中拔出的第一個元素,並獲取其類型,在創造類型的數組實例,像這樣的希望:

private Object[] decodeToArray(JSONArray list) throws JSONException { 

    if (list.length() > 0) { 
     Class<? extends Object> type = list.get(0).getClass(); 
     type[] result = Array.newInstance(type, list.length()); 
    } 

不過,當然,這並不編譯 - type是一個實例,不是一個類;它不會接受?作爲一種類型;如果我嘗試給它一個名字,那麼它需要在方法簽名中聲明T,它似乎沒有以任何方式連接到從列表元素獲得的未知類型。

而這對於int[]double[]的情況當然根本不做任何事情。整數[]和雙[]可能是可以接受的折中。

作爲臨時解決方案,我已經能夠將JSONArray呈現爲Object [],然後更改與這些數組交互的服務器端代碼以根據需要投射它們,但它很醜陋,而且它允許一些JSON-yuck滲入我們的代碼庫。

是否有任何庫或巧妙的技巧用於在Java中創建未知類型的數組?有一個JSON約定,我可以要求使用它會告訴我什麼類型是預期的?

+0

這是家庭作業或生產? – durron597 2013-05-02 18:25:11

+0

生產。屬於科學類。 – AbGator 2013-05-02 18:28:09

+0

是的,我想,我不知道你是否有一個編寫Json解釋器的項目,或者你是否需要這個功能。查看我的回答 – durron597 2013-05-02 18:28:57

回答

0

假定這是現實世界,而不是功課,只是使用Gson, a library that does exactly what you're looking for.

此外,請仔細閱讀此線程:https://stackoverflow.com/questions/338586/a-better-java-json-library?rq=1

+0

我已經看過Gson api,並沒有看到很多我沒有通過org.json獲得的功能 - 你能指點我一個類還是一個例子? – AbGator 2013-05-02 18:29:03

+0

@AbGator查看我剛剛鏈接的stackoverflow問題 – durron597 2013-05-02 18:30:02

相關問題