内容简介:http接口测试或一些其他情况常需要打印 JSON 返回,但是默认的json展示形式是紧凑型的,不易阅读,或许很多人习惯于使用在线格式化工具。但如果能用代码直接 JSON 美化,为什么还要多开一次浏览器呢?比如有这样一个map或者结构体。
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("%s\n", uglyBody)
打印结果:
{"id":1,"name":"poloxue"}
效果并不友好,如果是复杂的 map,结果将非常乱。
可以使用json.MarchalIndent,代码如下:
body, err := json.MarshalIndent(u, "", "\t") if err != nil { panic(err) } fmt.Printf("%s\n", 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("%s\n", out.String())
结果如下:
{ "id": 1, "name": "poloxue" }
方法二
github上面有人实现了一个 JSON pretty的包。
地址在:https://github.com/tidwall/pretty
使用非常简单,代码如下:
fmt.Printf("%s\n", pretty.Pretty(uglyBody))
结果如下:
{ "id": 1, "name": "poloxue" }
这个库没有依赖 encoding/json,纯代码解析字符串。而且还可以做 color 美化。
color美化的示例代码:
fmt.Printf("%s\n", pretty.Color(uglyBody, pretty.TerminalStyle)) fmt.Printf("%s\n", pretty.Color(pretty.Pretty(uglyBody), pretty.TerminalStyle)) pretty.TerminalStyle表示打印控制台的着色风格,结果如下:
SO 漂亮!
一个JSON美化小工具
利用上面介绍的这些,开发一个非常简单的小工具,代码如下:
package main import ( "flag" "fmt" "github.com/tidwall/pretty" ) var help bool var uglyJson string var indent string func 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:\n\n") flag.PrintDefaults() return } var Options = &pretty.Options{Width: 80, Prefix: "", Indent: indent, SortKeys: false} fmt.Printf("%s\n", pretty.Color(pretty.PrettyOptions([]byte(uglyJson), Options), pretty.TerminalStyle)) }
编译成功之后,就可以用了。比如生成的可执行文件名为 prettyjson,美化 {"id":1,"name":"poloxue"}。
$ ./jsonpretty -s '{"id":1,"name":"poloxue"}'
效果如下:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 博客园细节美化打磨
- 详解低延时高音质:声音的美化与空间音效篇
- 使用 Git Rebase 美化 Git Commit 流程 - 前端
- UglifyJS 3.1.5 发布,JavaScript 压缩和美化工具包
- 10个HTML5美化版复选框和单选框
- 10个HTML5美化版复选框和单选框
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C#入门经典
[美] Karli Watson、Christian Nagel / 齐立波、黄静 / 清华大学出版社 / 2008-12 / 118.00元
这是一本成就无数C#程序员的经典名著,厚而不“重”,可帮助您轻松掌握C#的各种编程知识,为您的职业生涯打下坚实的基础,《C#入门经典》自第1版出版以来,全球销量已经达数万册,在中国也有近8万册的销量,已经成为广大初级C#程序员首选的入门教程,也是目前国内市场上最畅销的C#专业店销书,曾两次被CSDN、《程序员》等机构和读者评选为“最受读者喜爱的十大技术开发类图书”!第4版面向C#2008和.NET......一起来看看 《C#入门经典》 这本书的介绍吧!