2013-01-21 41 views
0

我看過this question並瞭解答案,但無法在我的場景中使用它。JSONObject.append - 結果是嵌套數組?

我的情況:我從MySQL數據庫中檢索通過JPA數據,並希望把這些數據變成JSONObject這樣

{ 
    "A":["1","2","3"], 
    "B":["1","2","3","4"], 
    "C":["1","2"] 
} 

的問題是,我不知道有多少陣列將檢索。它可以是1,也可以是200,具體取決於數據庫中的數據。

如果我append數據爲JSONObject這樣的:

import org.apache.tapestry5.json.JSONObject 
// ... 
JSONObject data = new JSONObject(); 
for (Value val : values) data.append(val.getName(), val.getValue()); 

我會得到

{"val_name": [[["1"],"2"],"3"], ...} 

是否有使用JSONOBject.append沒有創建JSONArrays和put荷蘭國際集團他們進入的方式JSONObject,這將導致嵌套JSONObject

+1

您使用哪個庫? 「JSONObject」的完整類名是什麼? – beny23

+0

我正在使用來自tapestry的'JSONObject'庫:'org.apache.tapestry5.json.JSONObject' –

+0

您可以使用任何其他庫嗎? – Tinman

回答

1

JSON對象是一個「字典」 - 名稱和值之間的映射。 JSON數組是值的順序列表,只有數值的序號位置標識它。將「附加」到對象上是沒有意義的 - 你爲它添加新的名稱/值對(儘管它們顯然稱它爲附加,只是爲了讓你感到迷惑)。如果在一個對象內,你想要類似於"A":["1","2","3"]的東西,那麼你必然必須將數組(作爲名稱/值對的值)插入到對象中。

但請注意,無論是在將數組插入到對象之前,還是在將附加值附加到數組之後。你只需要獲取/保存對數組的引用。

在你上面的例子中,你犯的錯誤是追加到對象而不是數組。