天天看點

細微之處見真章之JSON格式美化一、背景二、步驟三、思考

一、背景

今天 @段段 在技術群裡提出一個問題:”如何實作JSON的格式美化“。

具體含義是,通過後端代碼實作将緊湊的JSON字元串變為更美觀的形式。

如下面的JSON字元串

{\"age\":0,\"name\":\"張三\",\"sex\":\"女\"      
細微之處見真章之JSON格式美化一、背景二、步驟三、思考

轉化為如下圖的效果:

細微之處見真章之JSON格式美化一、背景二、步驟三、思考

這個問題知道API的人或許一下就可以答上來,不知道的人可能第一反應就是百度。

那麼是否有更好的解決方式呢?

本文重點講述該如何思考和解決這個問題,重點不是問題本身,希望能夠對大家有點啟發。

二、步驟

解決這個問題的辦法有很多種,下面是我建議的步驟。

最核心的思路是:先找,實在找不到自己造輪子。

特别特别特别強調,先思考,再行動。

2.1 先思考

JSON 字元串美化的功能在很多網頁工具類裡常用,按理說JSON的庫是不是應該提供了這種功能呢?

那麼該如何去找是否有這種功能呢??

首先想到的就是關鍵字,由于之前網頁上用過提供類似功能的網頁,功能描述都是”格式化“,”美化“。

而且我們思考一下,如果有這種功能應該叫啥名呢?是不是也應該叫”格式化/美化“呢?

沿着這個思路,我們去fastjson Jar包或者源碼中搜尋: beautify / format關鍵詞。

細微之處見真章之JSON格式美化一、背景二、步驟三、思考

然後找到疑似相關功能的代碼。

找到相關單測,運作看看效果:

細微之處見真章之JSON格式美化一、背景二、步驟三、思考

發現正是我們想要的。

2.2 從類出發

如果fastjson提供了格式化或者美化字元串的方法,最有可能和普通轉字元串的功能在一個類裡,是以也很容易找到這個函數。

public static String toJSONString(Object object, boolean prettyFormat) {
        if (!prettyFormat) {
            return toJSONString(object);
        }
        return toJSONString(object, SerializerFeature.PrettyFormat);
    }      
細微之處見真章之JSON格式美化一、背景二、步驟三、思考

2.3 看官方文檔

講真  fastjson 的代碼注釋很少,嚴重吐槽!!而且官方文檔非常不全,嚴重吐槽!!

對我們幫助不大。

2.4 借助搜尋引擎

搜 fastjson格式化或者美化,或者用英文從 google or  sof裡搜,可以找到很多線索。

https://github.com/alibaba/fastjson/issues/150
細微之處見真章之JSON格式美化一、背景二、步驟三、思考

2.5 問别人

通過前面幾個步驟,這個步驟幾乎用不到了。

三、思考

最近在思考新人如何更快更好地進階,很多多人着急學習,卻從來不思考該如何學習,我想最重要的一點應該轉變思維意識。

1 從學習具體和記憶具體知識為主,轉向學習思考和解決問題的方法為主。

2 學習時不要隻關心常用的功能,應該時常進源碼看一眼,打開函數清單,檢視一些非常用的功能。

3 應該從設計者的角度思考問題,想一下它應該有哪些功能,如果我設計我會怎麼寫,然後和源碼進行對比,體會才能深刻,才能不斷糾正自己的思路,像優秀的代碼靠攏。

如果是直接學習,直接看部落格分析,就像直接看答案做題,看着啥都會,其實根本沒掌握,看完容易忘,記住不會用。

4 很多問題再開口問别人之前,要 wait一下,檢查一下常見的步驟是否自己都用過了?如看源碼、看官方文檔、看單測、搜尋引擎搜尋等。

然而很多人輕視方法,很多人學了很久卻不思考該如何學習,很多人學了很久卻從不看源碼,很多人學了很久從不看官方文檔,很多人問問題之前都不思考,很多人找别人幫助之前甚至都沒有表述清楚問題。