json返回有序 2019 4.25

今天在写代码时碰到了很让人头疼的事情,
在php的代码中有如下

// 封装数据
        $data = array_merge($request->only([
            'stock_code',
            'credit_money',
            'auto_defer',
            'auto_selling_ceiling_price',
            'auto_selling_floor_price'
        ]), [
            'user_id' => $authUser->id,
            'begin_stock_price' => $handleResult['begin_stock_price'],
            'creation_fee' => $handleResult['creation_fee'],
            'holding_stock_count' => $handleResult['holding_stock_count']
        ]);

它把json数据很容易的封装了自己想要的属性,而我当初最初的想法是
创建个新的对象来返回
比如原先的对象是

public class Stock implements Serializable {
    public static final String INTRODUCE="股票";
    private String name;//股票名
    private BigDecimal lastPx;//股票当前价
    private BigDecimal preClose;//收盘价
    private BigDecimal openPx;//开盘价
    private BigDecimal highPx;//最高价
    private BigDecimal lowPx;//最低价

    private int businessAmount; //成交数目 由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
    private BigDecimal businessMoney;//成交金额 单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万;
    private BigDecimal pxChange;//涨跌额
    private BigDecimal pxChangeRate;//涨跌幅

那当需求是返回部分数据时我只能创建新的对象来把数据封装起来

public class StockZS  implements Serializable {
    private String name;//股票名
    private BigDecimal pxChange;//涨跌额
    private BigDecimal lastPx;//股票当前价
    private BigDecimal pxChangeRate;//涨跌幅
    private int businessAmount; //成交数目 由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
    private String turnover_ratio;

那可想而知如果需求一改那对象就没完没了了
因为只是简单的把数据查询到的返回,所以干脆试着用下fastjson封装下

public class TestController {

    @GetMapping("/test")
    public  JSONObject getJson(){
        Map<String,Object> map=new HashMap<>();
        map.put("like","打篮球");
        map.put("like2","唱跳");
        JSONObject jsonObject=new JSONObject();
        jsonObject.put("qq","152461");
        jsonObject.put("username","huang");
        jsonObject.put("song","code");
        jsonObject.put("sex","boy");
        map.put("height","175");
        map.put("weight","59");
        jsonObject.put("message",new JSONObject(map));
        return jsonObject;
    }
}

使用postman测试结果是

image.png

可想而知,我们的名字跑到了最下面,但是我们的名字却并不是最后添加的甚至优于message问题就出现在了hashmap这个数据结构
hashmap是一个散列图没有顺序! 这个顺序指的是插入顺序和出来顺序一样而不是进行排序。因此我们必须改用linkedHashmap

看下fastjson源码就知道了

 public JSONObject(int initialCapacity, boolean ordered) {
        if (ordered) {
            this.map = new LinkedHashMap(initialCapacity);
        } else {
            this.map = new HashMap(initialCapacity);
        }
    }

于是我们改成下面这样

 @GetMapping("/test")
    public  JSONObject getJson(){
        Map<String,Object> map=new LinkedHashMap<>();
        map.put("like","打篮球");
        map.put("like2","唱跳");
        //初始化长度   是否有序
        JSONObject jsonObject=new JSONObject(16,true);
        jsonObject.put("qq","152461");
        jsonObject.put("username","cxk");
        jsonObject.put("song","code");
        jsonObject.put("sex","boy");
        map.put("height","175");
        map.put("weight","59");
        jsonObject.put("message",new JSONObject(map));
        return jsonObject;
    }
image.png

这样就可以按照你喜欢的方式和你想要的顺序返回json字符串了~~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • JSON的特点: 1、JSON比XML的数据传递的有效性高;2、JSON完全独立于编程语言;3、JSON的本质是具...
    程序员之路阅读 3,809评论 0 3
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,550评论 1 32
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,704评论 0 3
  • 愉悦\恐惧\痛苦,是我们基本的情感。观察别人,内省自己,可以深刻地了解自己和他人。
    遇见未来的我阅读 43评论 0 0
  • 昨天下了好大的雪,2017年第一场雪,从白天一直下到半夜,高速封路,机场停航,到家喝了点酒,吃了丈母娘包的饺子,韭...
    Albert陈凯阅读 171评论 0 0

友情链接更多精彩内容