将JSON格式的字符串转换为CSV /字符串列表

时间:2014-04-15 12:53:47

标签: java json jsf csv jsf-2

我创建了一个CSV导出器,我将JSON格式的String转换为对象集合,然后转换为字符串列表。

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();

现在,我想动态地在List中添加一个新字符串并替换这一行:strings.add(obj.getName() + ";" + obj.getNumber() +"\n");它应该更强大。如果我不知道属性的确切名称,以某种方式可以调用所有的getter吗?

或者更好的解决方法是如何将JSON格式的String转换为字符串列表?

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:0)

您需要覆盖itemModel类中的toString()方法并根据CSV文件构建字符串

@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());
        }

答案 1 :(得分:0)

如果您已经知道所有属性,那么实现ItemModel的toString()就很好。

如果您已经不知道,可以使用Reflection来获取所有属性。