json返回有序 2019 4.25

今天在寫代碼時(shí)碰到了很讓人頭疼的事情,
在php的代碼中有如下

// 封裝數(shù)據(jù)
        $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數(shù)據(jù)很容易的封裝了自己想要的屬性,而我當(dāng)初最初的想法是
創(chuàng)建個(gè)新的對象來返回
比如原先的對象是

public class Stock implements Serializable {
    public static final String INTRODUCE="股票";
    private String name;//股票名
    private BigDecimal lastPx;//股票當(dāng)前價(jià)
    private BigDecimal preClose;//收盤價(jià)
    private BigDecimal openPx;//開盤價(jià)
    private BigDecimal highPx;//最高價(jià)
    private BigDecimal lowPx;//最低價(jià)

    private int businessAmount; //成交數(shù)目 由于股票交易以一百股為基本單位,所以在使用時(shí),通常把該值除以一百;
    private BigDecimal businessMoney;//成交金額 單位為“元”,為了一目了然,通常以“萬元”為成交金額的單位,所以通常把該值除以一萬;
    private BigDecimal pxChange;//漲跌額
    private BigDecimal pxChangeRate;//漲跌幅

那當(dāng)需求是返回部分?jǐn)?shù)據(jù)時(shí)我只能創(chuàng)建新的對象來把數(shù)據(jù)封裝起來

public class StockZS  implements Serializable {
    private String name;//股票名
    private BigDecimal pxChange;//漲跌額
    private BigDecimal lastPx;//股票當(dāng)前價(jià)
    private BigDecimal pxChangeRate;//漲跌幅
    private int businessAmount; //成交數(shù)目 由于股票交易以一百股為基本單位,所以在使用時(shí),通常把該值除以一百;
    private String turnover_ratio;

那可想而知如果需求一改那對象就沒完沒了了
因?yàn)橹皇呛唵蔚陌褦?shù)據(jù)查詢到的返回,所以干脆試著用下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測試結(jié)果是

image.png

可想而知,我們的名字跑到了最下面,但是我們的名字卻并不是最后添加的甚至優(yōu)于message問題就出現(xiàn)在了hashmap這個(gè)數(shù)據(jù)結(jié)構(gòu)
hashmap是一個(gè)散列圖沒有順序! 這個(gè)順序指的是插入順序和出來順序一樣而不是進(jìn)行排序。因此我們必須改用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字符串了~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容