GO小知识之如何做JSON美化

栏目: Go · 发布时间: 4年前

内容简介: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表示打印控制台的着色风格,结果如下:

GO小知识之如何做JSON美化

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"}'

效果如下:

GO小知识之如何做JSON美化


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

概率

概率

[俄]施利亚耶夫 / 周概容 / 高等教育出版社 / 2008-1 / 48.00元

《概率(第2卷)(修订和补充第3版)》是俄国著名数学家A.H.施利亚耶夫的力作。施利亚耶夫是现代概率论奠基人、前苏联科学院院士、著名数学家A.H.柯尔莫戈洛夫的学生,在概率统计界和金融数学界影响极大。《概率(第2卷)(修订和补充第3版)》作为莫斯科大学最为出色的概率教材之一。分为一、二两卷,并配有习题集。第二卷《概率(第2卷)(修订和补充第3版)》是离散时间随机过程(随机序列)的内容。重点讲述(强......一起来看看 《概率》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具