2012-05-20 31 views
2

我試圖找到任何有用的例子來解決這個簡單的任務,但是,沒有發現真正有用的東西。我在Java的初學者水平,我絕對需要一些幫助。如何使用「org.json」包中的類將對象序列化爲JSON字符串?

我有兩個簡單的Java類:

private class FMList { 
    public List<FMItem> items = new ArrayList(); 
    public long size = 0; 
    public int dirs = 0; 
    public int files = 0; 
    public String path = ""; 
} 

private class FMItem { 
    public boolean is_dir = false; 
    public String[] ascii = {}; 
    public String name = ""; 
    public String mode = ""; 
    public long size = 0; 
    public long mtime = 0; 
    public boolean ext = false; 
    public String cache = ""; 
} 

我的應用程序(applet)中創建的FMList實例,設置數據對象屬性,最後對象序列化到JSON字符串。我試過Google Gson庫。簡單new Gson().toJson(fmList)完成這項工作,但我的小程序未能開始給予例外,Gson庫有點像安全問題。同時,applet已經簽名並且所有的AccessController都被設置了。

然後,我嘗試使用JSON official website中的類。不再有例外,但簡單的new JSONObject(fmList).toString()只給出{}。我知道應該以某種方式以不同的方式使用它。

什麼是這種簡單的對象序列化到JSON字符串使用類從"org.json"包的正確方法是什麼?

謝謝你的幫忙!

+0

兩個答案都指出圖書館在獲得者身上運作。你是否可以將吸氣劑添加到對象中? – phatfingers

+0

@phatfingers然而,有一個指定屬性名稱的文檔化方法,它不起作用。爲什麼? – VisioN

回答

6

對於現場訪問像你正在使用(沒有get/set方法),你必須指定它們: http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject(java.lang.Object, java.lang.String[])

你要麼使用JSON Writer或「斯丁格」(寫入流或創建的字符串)不得到一個漂亮的印刷json。

http://www.json.org/javadoc/org/json/JSONWriter.html

http://www.json.org/javadoc/org/json/JSONStringer.html

更新:同樣的類不能是私有的與簡單org.json庫。 這工作得很好:

public class Main { 
    public static class FMList { 
     public long size = 0; 
     public int dirs = 0; 
     public int files = 0; 
     public String path = ""; 
    } 

    public static void main(String[] args) { 
     System.out.println(new JSONObject(new FMList(), new String[] { "dirs", "files" }).toString()); 
    } 

} 

產地:{"files":0,"dirs":0}

更改爲私有類生產:{}

+0

嗯...要指定,你的意思是這樣的:'新的JSONObject(fmList,新的字符串[] {「項目」,「dirs」,「文件」,...})。的toString()'? – VisioN

+0

確實,我很害怕。 –

+0

我試過了,似乎沒有工作:相同的輸出'{}'。 – VisioN

相關問題