使用Go 的編碼/JSON 套件實現人類可讀的JSON 輸出
您提到在管道時面臨生成人類可讀的JSON 輸出的挑戰透過jq 執行foo 指令的結果。雖然沒有專門為此目的設計的開源 jq 包裝器,但您可以利用 Go 的內建編碼/json 套件來實現所需的結果。
利用json.MarshalIndent() 和Encoder .SetIndent()
json.MarshalIndent() 函數提供了一種將JSON 值為編碼的便捷方法格式化為的便捷方法格式化的字串。透過指定所需的前綴和縮排,您可以產生人類可讀的輸出。同樣,json.Encoder 的 SetIndent() 方法可讓您為 JSON 輸出建立縮排。
範例程式碼
這裡有一個示範 json.MarshalIndent 用法的範例():
package main import ( "encoding/json" ) func main() { m := map[string]interface{}{"id": "uuid1", "name": "John Smith"} data, err := json.MarshalIndent(m, "", " ") if err != nil { panic(err) } fmt.Println(string(data)) }
也可以使用json.NewEncoder控制縮排:
package main import ( "encoding/json" "os" ) func main() { enc := json.NewEncoder(os.Stdout) enc.SetIndent("", " ") m := map[string]interface{}{"id": "uuid1", "name": "John Smith"} if err := enc.Encode(m); err != nil { panic(err) } }
格式化預先產生的JSON 文字
如果您有預先產生的JSON 文本,則可以使用json.Indent () 函數格式化它:
package main import ( "bytes" "encoding/json" ) func main() { src := `{"id":"uuid1","name":"John Smith"}` dst := &bytes.Buffer{} if err := json.Indent(dst, []byte(src), "", " "); err != nil { panic(err) } fmt.Println(dst.String()) }
透過使用這些技術,您可以輕鬆地在Go程式中產生人類可讀的 JSON 輸出,而無需需要外部 jq 包裝器。
以上是Go 的「encoding/json」套件如何產生人類可讀的 JSON 輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!