首页 新闻 搜索 专区 学院

Java中List<T> 集合转换成json,如何不改变T对象的属性顺序?

0
[已解决问题] 解决于 2018-01-06 16:10

例如:List<User> list = new ArrayList<User>();

User user1 = new User("userId","name","age","sex");

User user2 = new User("userId1","name1","age1","sex1");

User user3 = new User("userId2","name2","age2","sex2");

list.add(user1);list.add(user2);list.add(user3);

现在要将list转换成json,要求解析之后的key顺序和user的顺序一样,如果user的某个属性是null,那么就解析成空串,请问怎么解决?

admin_jh的主页 admin_jh | 菜鸟二级 | 园豆:204
提问于:2017-12-04 08:43
< >
分享
最佳答案
0

看看这片子文章。

https://www.cnblogs.com/xmaomao/p/3184542.html

奖励园豆:5
fcyh | 小虾三级 |园豆:568 | 2017-12-04 10:34

现在是mybatis返回一个list集合,list存储的对象类型不确定,然后根据list这个集合用jxl生成Excel表格,现在我是想写一个通用的工具类,只要传递一个list就可以根据list创建出对应的Excel。

问题是用gson解析,那么对象属性是null的时候就跳过了,这样生成的表格就会错列;用jsonlib的JSONArray解析就会把list存的对象的属性顺序打乱。

public static <T> void createExcel(List<T> list, String sheetName, int sheetNum, String path) {
        /*Gson gson = new Gson();
        String gsonStr = gson.toJson(list);*/
        JSONArray jsonArray = JSONArray.fromObject(list);
        try {
            //这里的path是包含文件名的,在传入之前要保证路径完整存在
            WritableWorkbook book = Workbook.createWorkbook(new File(path));
            WritableSheet sheet = book.createSheet(sheetName, sheetNum);
            int hang = 0;
            for (Object object : jsonArray) {
                JSONObject jsonObject = JSONObject.fromObject(object);
                @SuppressWarnings("rawtypes")
                Iterator iterator = jsonObject.keys();
                int lie = 0;
                while (iterator.hasNext()) {
                    sheet.addCell(new Label(lie++, hang, jsonObject.getString((String) iterator.next())));
                }
                hang++;
            }
            book.write();
            book.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这是代码,望大神给点意见!

admin_jh | 园豆:204 (菜鸟二级) | 2017-12-04 14:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册