哈尔滨速成网站建设,wordpress 显示图片啊,国内免费saas+crm正在,网站建设 预算经常有些小知识想分享出来#xff0c;但又构不成体系#xff0c;一直觉得文章形式发出不太合适。准备以 知乎想法 分享出来#xff0c;但发现代码展示不太友好。还是发文章吧#xff0c;该类分享将以 小知识 为前缀。后端http接口测试常需要打印 J…经常有些小知识想分享出来但又构不成体系一直觉得文章形式发出不太合适。准备以 知乎想法 分享出来但发现代码展示不太友好。还是发文章吧该类分享将以 小知识 为前缀。后端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 (flagfmtgithub.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}效果如下