使用com.alibaba.fastjson 将 json转换为csv,同时指定表头顺序。/解决org.json转换csv顺序变了

引言:

fastjson目前我了解好像是没有支持将 json 转为 csv 的,网上大多是用org.jsonCDL.toString 来将json数组转化为csv的,但是在我这出现两个问题:

1. 表头指定的顺序会变:

我的json数组:
[{"name":"LiMing","age":"28","gender":"man"},{"name":"LiPing","age":"26","gender":"women"}]
我用CDL.toString 结果得到的是:

gender,name,age
women,LiPing,26
man,LiMing,28

但我们其实想要,名字在前面:

name,age,gender
LiMing,28,man
LiPing,26,women

这是因为,CDL.toString 是根据 传入的json数组中的JSONObject来处理的,而org.jsonJSONObject又是按a-z顺序来排序,那么问题就变成了,如何让org.jsonJSONObject 有序,可以看到他的构造方法中,默认是HashMap, 将其改为LinkedHashMap即可保持有序,

    public JSONObject() {
   
        this.map = new LinkedHashMap();
    }

但是改源码很不方便,并且还要自己打包使用,不知道为什么org.json自己不出一个orderJSONObject呢。

2. 项目中都是用的fastjson,用两个容易混乱

即使按上一步所说的修改了源码,也会在同一个项目中用到两个json包,特别不利于维护以及引用时容易搞错。并且fastjson支持传入参数指定一个有序的JSONObject,这一点比org.json好多了,但是fastjson不支持转化为csv,所以要写一个将com.alibaba.fastjson.JSONArray转化为csv的方法,主要就是参考org.jsonCDL.java了。

解决:

以下是代码:
使用示例:

         JSONArray array = new JSONArray();
         
        JSONObject object2 = new JSONObject(new LinkedHashMap<>()); // 传入LinkedHashMap指定有序
        object2.put("name","LiMing");
        object2.put("age","28");
        object2.put("gender","man");
        
        JSONObject object = new JSONObject(new LinkedHashMap<>()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值