2016-09-23 73 views
2

我試着以下JSON字符串數組轉換這個JSON字符串成普通Java數組列表轉換並得到了以下錯誤:如何使用GSON

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at net.sf.json.AbstractJSON.(AbstractJSON.java:54) at net.sf.json.util.CycleDetectionStrategy.(CycleDetect‌​ionStrategy.java:36) at net.sf.json.JsonConfig.(JsonConfig.java:65) at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:84)

JSON:

[ 
    { 
     "file_name":"1.xml", 
     "file_ext":"application/octet-stream", 
     "sr_no":"0.1", 
     "status":"Checked ", 
     "rev":"1", 
     "locking":"0" 
    }, 
    { 
     "file_name":"2.xml", 
     "file_ext":"json/octet-stream", 
     "sr_no":"0.2", 
     "status":"Not Checked ", 
     "rev":"2", 
     "locking":"1" 
    }, 
    { 
     "file_name":"3.xml", 
     "file_ext":"application/json-stream", 
     "sr_no":"0.3", 
     "status":"Checked ", 
     "rev":"1", 
     "locking":"3" 
    }, 
    { 
     "file_name":"4.xml", 
     "file_ext":"application/octet-stream", 
     "sr_no":"0.4", 
     "status":"Checked ", 
     "rev":"0.4", 
     "locking":"4" 
    } 
] 

代碼:

JSONArray nameArray = (JSONArray) JSONSerializer.toJSON(output); 
System.out.println(nameArray.size()); 
for(Object js : nameArray) 
{ 
    JSONObject json = (JSONObject) js; 
    System.out.println("File_Name :" +json.get("file_name"));           
} 
+3

我投票結束這個問題,因爲這不是一個問題,而是一個工作要求。 –

+0

至少要顯示你目前的工作,並告訴我們你有什麼問題。不要發表懶惰的問題,顯示沒有努力的證據 –

+0

對不起,但這不是工作要求實際上,我已經嘗試了答案,並得到了線程「AWT-EventQueue-0」中的異常異常java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory \t at net.sf.json.AbstractJSON。 (AbstractJSON.java:54) \t at net.sf.json.util.CycleDetectionStrategy。 (CycleDetectionStrategy.java:36) \t at net.sf.json.JsonConfig。 (jsonconfig.java:65) \t at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:84) – user6773905

回答

0

您可以創建一個java類,實體是:file_name, file_ext, sr_no, status, rev, locking字符串類型。

然後調用:

public static void main(String[] args) { 
    String json = your json string; 
    TestJson[] respone = new Gson().fromJson(json, TestJson[].class); 
    for (TestJson s : respone) { 
     System.out.println("File name: " + s.getFile_name()); 
    } 
} 


所以,你有你想要的對象的列表。

+0

可以請你幫我做例子,因爲我已經創建了類突然想知道如何通過代碼獲取對象列表。 – user6773905

+0

我並不是真的瞭解你的意思,你可以更清楚地說出你的意思嗎? – Numb

+0

非常感謝。你的代碼真的幫了我.. – user6773905

0

F我首先必須說你的問題相當「醜陋」,下一次請提高你的問題的質量。

答:

嘗試使用com.fasterxml.jackson.databind.ObjectMapper

如果你有一個Java類來描述在列表中的項目:

final ObjectMapper mapper = new ObjectMapper(); 
YourClass[] yourClasses = mapper.readValue(YourString, YourClass[].class); 

然後將數組轉換爲List。

如果你沒有java類,只需要你LinkedHashMap。

+0

GSON也有一個formJson()方法 –

2

我知道問題是關於將JSON字符串轉換爲Java Array,但我也想回答如何使用Gson Library將JSON字符串轉換爲ArrayList。

由於我花了大量的時間來解決這個問題,我希望我的解決方案可以幫助其他人。

我的JSON字符串類似於這樣一個 -

enter image description here

我有一個名爲StockHistory一個對象,我想這個JSON轉換成StockHistory一個ArrayList。

這是我StockHistory類的樣子 -

class StockHistory {  
Date date; 
Double open; 
Double high; 
Double low; 
Double close; 
Double adjClose; 
Double volume; 
} 

,我用JSON數組轉換成的StockHistory ArrayList中的代碼如下 -

Gson gson = new Gson(); 
Type listType = new TypeToken< ArrayList<StockHistory> >(){}.getType(); 
List<StockHistory> history = gson.fromJson(reader, listType); 

現在,如果你正在閱讀從文件的JSON,讀者的初始化會 -

Reader reader = new FileReader(fileName);

,如果你是一個字符串,只是轉換成JSON對象,然後,讀者的初始化,簡直是 -

String reader = "{ // json String }";

希望有所幫助。乾杯!!!