2013-01-21 56 views
1

我有代碼看起來是這樣的:不希望的輸出,似乎是一個數組

import net.sf.json.*;--just so you know what the library is 
... 
JSONArray a = new JSONArray(); 
JSONObject p = new JSONObject(); 
p.put("some_attribute1","some normal string"); 
p.put("some_attribute2","[3something]"); 
p.put("some_attribute3","[something3]"); 
a.add(p); 
System.out.println(a.toString()); 

這產生:

[ 
    { 
     "some_attribute1":"some normal string", 
     "some_attribute2":["3something"], 
     "some_attribute3":"[something3]" 
    } 
] 

而不是所希望的結果:

[ 
    { 
     "some_attribute1":"some normal string", 
     "some_attribute2":"[3something]", 
     "some_attribute3":"[something3]" 
    } 
] 

注意「some_attribute2」是實際輸出中的數組與字符串中的字符串之間的區別所需的輸出。任何人都可以解釋爲什麼這是?此外,如果有什麼更好的分類我的問題的術語?

+1

看起來像一個錯誤。我敢打賭,開發者會對bug報告感到高興。 – kutschkem

+0

是啊......我在代碼頁上發現了錯誤,看起來項目不再被支持......看到我的答案。 – Reimius

回答

-1

貌似奇怪的行爲,但如果put嘗試將值轉換成一個JSONObject,如果我解釋documentation正確看來,你需要引用一些字符串:

字符串不需要在被引用如果它們不以引號或單引號開頭,並且它們不包含前導空格或尾隨空格,並且它們不包含任何以下字符:{ } [ ]/\ : , = ; #,並且如果它們看起來不像數字並且它們不是保留字true,falsenull

這意味着你,如果你想有一個字符串,你應該使用:

p.put("some_attribute2","'[3something]'"); 
+0

不起作用。我閱讀該文檔,該部分用於將JSON編碼轉換爲Java表示。在上面的例子中,我將從Java到JSON。 – Reimius

+0

@Reimius該部分是關於'構造函數',但它不適合那些JSONObject,所以我認爲它引用[element(String,Object)](http://json-lib.sourceforge)的第二個參數。 net/apidocs/net/sf/json/JSONObject.html#element%28java.lang.String,%20java.lang.Object%29)將Java轉換爲JSON的方法。這只是一個猜測,它也適用於'put',它看起來應該是相同的,但沒有文檔。 – Kapep

+0

你測試過了嗎?我相信我做了,但仍然無法工作。 – Reimius