# butison **Repository Path**: guo-dingyi/butison ## Basic Information - **Project Name**: butison - **Description**: butison 是一个用 Go 语言编写的高性能 JSON 格式化库。它不仅可以将 JSON 转换为易读的格式,还支持 ANSI 彩色输出、高度自定义样式以及流式处理超大 JSON,旨在为开发者提供灵活、炫酷的 JSON 美化体验。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-02-25 - **Last Updated**: 2026-03-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言 ## README # butison ### 项目介绍 butison 是一个用 Go 语言编写的高性能 JSON 格式化库。它不仅可以将 JSON 转换为易读的格式,还支持 ANSI 彩色输出、高度自定义样式以及流式处理超大 JSON,旨在为开发者提供灵活、炫酷的 JSON 美化体验。 --- ### 快速开始 #### 丰满的结构化 使用案例: ```json {"poetry":[{"author":"潘祺安", "title": "沙河涌","content": ["沙河浅浅水清清" , "绿树融融两岸盈", "世事纷纷人意倦", "溪流漫漫洗心情"],"time": {"year": 2.026e+3, "month": 2.0 , "day": 12},"poemInfo":{"genre": "今体诗", "metrical": "七言绝句", "rhymeDictionary": "平水韵", "rhyme": "庚"} }, null,null,null]} ``` 你只需要一行代码: ```go result, err := butison.BustyJson(example) ``` 你可以会获得像这样的结构化json: ```json { "poetry":[ { "author":"潘祺安", "title":"沙河涌", "content":[ "沙河浅浅水清清", "绿树融融两岸盈", "世事纷纷人意倦", "溪流漫漫洗心情" ], "time":{ "year":2.026e+3, "month":2.0, "day":12 }, "poemInfo":{ "genre":"今体诗", "metrical":"七言绝句", "rhymeDictionary":"平水韵", "rhyme":"庚" } }, null, null, null ] } ``` 我也提供了流式处理的方法,只要你出传入`io.Reader`和`io.Writer` ```go err := butison.BustyJsonByStream(reader, writer) ``` --- #### 多彩的结构化 我提供了 ANSI 颜色编码的json样式,可以给 json 上色,可以将json各个字段五颜六色的输出到屏幕上 你只需要调用这个api然后就能获得五彩斑斓的结构化json了 ```json result, err := butison.ColorfulBustyJson(example) ``` 我也提供了流式处理的方法,只要你出传入`io.Reader`和`io.Writer` ```go err := butison.ColorfulBustyJsonByStream(reader, writer) ``` --- #### 苗条的结构化 你只需要调用这个api: ```go result, err := butison.SlimJson(example) ``` 你就会获得这样的苗条的结构化json: ```json {"poetry":[{"author":"潘祺安","title":"沙河涌","content":["沙河浅浅水清清","绿树融融两岸盈","世事纷纷人意倦","溪流漫漫洗心情"],"time":{"year":2.026e+3,"month":2.0,"day":12},"poemInfo":{"genre":"今体诗","metrical":"七言绝句","rhymeDictionary":"平水韵","rhyme":"庚"}},null,null,null]} ``` 我也提供了流式处理的方法,只要你出传入`io.Reader`和`io.Writer` ```go err := butison.SlimJsonByStream(reader, writer) ``` --- #### 自定义结构化样式 如果你对本项目提供的默认结构化json样式不满足,你可以根据自己的需求自定义样式。 butison 提供了方便的自定义设置,你可以根据自己的需求自定义样式。 你只需创建一个`JsonStyle`对象,然后传入`DefineJsonByString`函数即可。 ```go example := `...` var jsonStyle *JsonStyle = style.NewJsonStyle() result, err:= DefineJsonByString(example, style) ``` 我也提供了流式处理的方法,只要你出传入`io.Reader`和`io.Writer` ```go result, err := DefineJsonByStream(reader, writer, style) ``` --- **关于 JsonStyle 的说明** ```go type JsonStyle struct { // [2][]byte 第一个[]byte是修饰目标字段的前面, 第二个[]byte是修饰目标字段的后面 Key [2][]byte // 键的样式 ObjectComma [2][]byte // 对象逗号的样式 Colon [2][]byte // 冒号的样式 Brace [2][]byte // 大括号的样式 Bracket [2][]byte // 中括号的样式 ArrayComma [2][]byte // 数组逗号的样式 String [2][]byte // 字符串的样式 Number [2][]byte // 数字的样式 True [2][]byte // true 的样式 False [2][]byte // false 的样式 Null [2][]byte // null 的样式 LineFeed []byte // 换行符的样式 Indent []byte // 缩进符的样式 } ``` 请尽量不要使用`&JsonStyle{}`直接创建,而是尽量通过`NewJsonStyle()`创建,或者通过别样式克隆来创建`style.Clone()` `func NewJsonStyle() *JsonStyle` `func (j *JsonStyle) Clone() *JsonStyle` JsonStyle 提供了方便的链式调用的setter方法,你可以根据自己的需求方便的进行设置,例如这样 `NewJsonStyle().SetIndent(" ").SetLineFeed("\n").SetColon("", " ")` JsonStyle 提供了方便的样式组合的api, 即“穿内衣” 和 “穿外套”,顾名思义,“穿内衣”是将新的样式套在里面,而“穿外套” 则是将新的样式套在外面。 `func (s *JsonStyle) PutUndies(undies *JsonStyle) *JsonStyle` `func (s *JsonStyle) PutCoat(coat *JsonStyle) *JsonStyle` --- #### 完全的自定义构建 如果说以上的样式组合你仍然不满足, 你可以完全自定义构建你的json样式。 你可以重新实现`JsonBuilder`接口,来自定义你的json样式。 ```go type JsonBuilder interface { AppendKey(b []byte) error AppendObjectComma(b []byte) error AppendColon(b []byte) error AppendLeftBrace(b []byte) error AppendRightBrace(b []byte) error AppendLeftBracket(b []byte) error AppendRightBracket(b []byte) error AppendArrayComma(b []byte) error AppendString(b []byte) error AppendNumber(b []byte) error AppendTrue(b []byte) error AppendFalse(b []byte) error AppendNull(b []byte) error } ``` 然后像这样来调用 ```go exampleJson := `...` stream, err := NewJsonStreamByString(exampleJson) yourBuilder := NewYourBuilder() // 你对JsonBuilder的实现 DefineJson(stream, yourBuilder) ``` --- ### 特性 - **高性能** – 基于状态机实现,时间复杂度 O(n),空间复杂度 O(1);使用字节切片和索引操作,极大减少内存复制。 - **彩色输出** – 内置 ANSI 颜色方案,让 JSON 在终端中层次分明、一目了然。 - **多种格式** – 提供“丰满”(带缩进)、“苗条”(压缩)等多种内置风格,一键调用。 - **高度自定义** – 通过 `JsonStyle` 结构体可随意调整缩进、换行、颜色、前后缀等;甚至可以实现 `JsonBuilder` 接口完全自定义构建逻辑。 - **流式处理** – 支持 `io.Reader` 和 `io.Writer`,可处理大型的 JSON 数据,内存占用极低。 - **简单易用** – API 设计直观,几行代码即可上手。 ### 参与贡献 ### 特技