javascript
json string 格式_GO小知识之如何做JSON美化
后端http接口測試常需要打印 JSON 返回,但是默認的json展示形式是緊湊型的,不易閱讀,或許很多人習慣于使用在線格式化工具。但如果能用代碼直接 JSON 美化,為什么還要多開一次瀏覽器呢?
非string類型的結構體、map等類型的Marsh美化
比如有這樣一個map或者結構體。
u := map[string]interface{}{"id": 1,"name": "poloxue", }使用GO內置的包 encoding/json。
如果用 json.Marshal 轉化,代碼如下:
uglyBody, err := json.Marshal(u) if err != nil {panic(err) } fmt.Printf("%sn", uglyBody)打印結果:
{"id":1,"name":"poloxue"}效果并不友好,如果是復雜的 map,結果將非常亂。
可以使用json.MarchalIndent,代碼如下:
body, err := json.MarshalIndent(u, "", "t") if err != nil {panic(err) } fmt.Printf("%sn", body)t表示縮進效果。最終的結果如下:
{"id": 1,"name": "poloxue" }看著舒服了很多。
JSON的string如何美化?
如果是一個 JSON 字符串怎么辦?比如 上面示例中的uglyBody的結果。
方法一
使用 encoding/json 包中 Indent 方法。
代碼如下:
var out bytes.Buffer err = json.Indent(&out, uglyBody, "", "t") if err != nil {panic(err) } fmt.Printf("%sn", out.String())結果如下:
{"id": 1,"name": "poloxue" }方法二
github上面有人實現了一個 JSON pretty的包。
地址在:https://github.com/tidwall/pretty
使用非常簡單,代碼如下:
fmt.Printf("%sn", pretty.Pretty(uglyBody))結果如下:
{"id": 1,"name": "poloxue" }這個庫沒有依賴 encoding/json,純代碼解析字符串。而且還可以做 color 美化。
color美化的示例代碼:
fmt.Printf("%sn", pretty.Color(uglyBody, pretty.TerminalStyle)) fmt.Printf("%sn", pretty.Color(pretty.Pretty(uglyBody), pretty.TerminalStyle))pretty.TerminalStyle表示打印控制臺的著色風格,結果如下:
SO 漂亮!
一個JSON美化小工具
利用上面介紹的這些,開發一個非常簡單的小工具,代碼如下:
package mainimport ("flag""fmt""github.com/tidwall/pretty" )var help bool var uglyJson string var indent stringfunc init() {flag.BoolVar(&help, "h", false, "show help")flag.StringVar(&uglyJson, "s", "", "json string")flag.StringVar(&indent, "i", "t", "indent string, default tab") }func main() {flag.Parse()if help {fmt.Printf("usage:nn")flag.PrintDefaults()return}var Options = &pretty.Options{Width: 80, Prefix: "", Indent: indent, SortKeys: false}fmt.Printf("%sn", pretty.Color(pretty.PrettyOptions([]byte(uglyJson), Options), pretty.TerminalStyle)) }編譯成功之后,就可以用了。比如生成的可執行文件名為 prettyjson,美化 {"id":1,"name":"poloxue"}。
$ ./jsonpretty -s '{"id":1,"name":"poloxue"}'效果如下:
總結
以上是生活随笔為你收集整理的json string 格式_GO小知识之如何做JSON美化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 央视记者王冰冰为何走红?博导和研究生写了
- 下一篇: “牛津第一,16岁上大学”,中国美女学霸