2014-04-15 122 views
0

我創建了一個CSV導出器,我將JSON格式的字符串轉換爲對象集合,然後轉換爲字符串列表。現在將JSON格式的字符串轉換爲CSV /字符串列表

Gson gson = new Gson(); 
Type collectionType = new TypeToken<Collection<itemModel>>(){}.getType(); 
Collection<itemModel> objects = gson.fromJson(jsonString, collectionType); 
// jsonString = "[{"name":"A","number":25},{"name":"B","number":26}]" 
String filename = "export.csv"; 
FacesContext fc = FacesContext.getCurrentInstance(); 
ExternalContext ec = fc.getExternalContext(); 
ec.responseReset(); 
ec.setResponseContentType("text/comma-separated-values"); 
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); 
OutputStream output = ec.getResponseOutputStream(); 

List<String> strings = new ArrayList<String>(); 
    for (itemModel obj : objects) { 
     strings.add(obj.getName() + ";" + obj.getNumber() +"\n"); 
    } 
    for (String s : strings) { 
     output.write(s.getBytes()); 
    } 
fc.responseComplete(); 

,我願做一個新的字符串添加到列表動態和替換該行:strings.add(obj.getName() + ";" + obj.getNumber() +"\n");應該更加強勁。如果我不知道屬性的確切名稱,是否可以調用所有getter?

或者更好的解決方案如何將JSON格式的字符串轉換爲字符串列表?

任何意見將不勝感激!

+0

試試這個鏈接http://stackoverflow.com/questions/8724866/how-to-convert-data-base-records-into-csv-file-in-android。我希望這能幫到您。 – malavika

+0

感謝您的建議,但我沒有看到有可能的解決方案。我需要動態調用對象類的所有getter或找到另一個更好的解決方案。 – PrincAm

回答

0

你需要重寫itemModel類的toString()方法,並建立根據CSV您的字符串foramt

@Override 
public String toString() { 
    StringBuilder builder = new StringBuilder(); 
    builder.append(name); 
    builder.append(";"); 
    builder.append(number); 
    builder.append("\n"); 
    return builder.toString(); 
} 

//最後wrtie

List<itemModel> itemModels = gson.fromJson(jsonString, collectionType); 
     for (itemModel itemModel : itemModels) { 
       output.write(itemModel.toString().getBytes()); 
     } 
+0

絕對精彩!它可能永遠不會知道這一點。 – PrincAm

0

實施的toString()ItemModel的是好的,如果你已經知道所有的屬性。

如果你已經不知道它們,你可以使用Reflection來獲得所有的屬性。

+0

感謝您的推薦!我試圖實現反射,但我沒有解決如何在循環內調用找到的getter(for itemModel obj:objects){}'但仍然toString()對我來說已經足夠了。 – PrincAm