diff --git a/docs/formatter.md b/docs/formatter.md
index d022e02..18e5192 100644
--- a/docs/formatter.md
+++ b/docs/formatter.md
@@ -23,6 +23,8 @@ import (
## Index
- [Comma](#Comma)
+- [Pretty](#Pretty)
+- [PrettyToWriter](#PrettyToWriter)
@@ -63,3 +65,85 @@ func main() {
// ¥1,234,567
}
```
+
+### Pretty
+
+Pretty data to JSON string.
+
+Signature:
+
+```go
+func Pretty(v any) (string, error)
+```
+
+Example:
+
+```go
+package main
+
+import (
+ "fmt"
+ "github.com/duke-git/lancet/v2/formatter"
+)
+
+func main() {
+ result1, _ := formatter.Pretty([]string{"a", "b", "c"})
+ result2, _ := formatter.Pretty(map[string]int{"a": 1})
+
+ fmt.Println(result1)
+ fmt.Println(result2)
+
+ // Output:
+ // [
+ // "a",
+ // "b",
+ // "c"
+ // ]
+ // {
+ // "a": 1
+ // }
+}
+```
+
+### PrettyToWriter
+
+Pretty encode data to writer.
+
+Signature:
+
+```go
+func PrettyToWriter(v any, out io.Writer) error
+```
+
+Example:
+
+```go
+package main
+
+import (
+ "fmt"
+ "github.com/duke-git/lancet/v2/formatter"
+)
+
+func main() {
+ type User struct {
+ Name string `json:"name"`
+ Aage uint `json:"age"`
+ }
+ user := User{Name: "King", Aage: 10000}
+
+ buf := &bytes.Buffer{}
+ err := formatter.PrettyToWriter(user, buf)
+
+ fmt.Println(buf)
+ fmt.Println(err)
+
+ // Output:
+ // {
+ // "name": "King",
+ // "age": 10000
+ // }
+ //
+ //
+}
+```
diff --git a/docs/formatter_zh-CN.md b/docs/formatter_zh-CN.md
index 6eddd08..080dabd 100644
--- a/docs/formatter_zh-CN.md
+++ b/docs/formatter_zh-CN.md
@@ -23,6 +23,8 @@ import (
## 目录
- [Comma](#Comma)
+- [Pretty](#Pretty)
+- [PrettyToWriter](#PrettyToWriter)
@@ -63,3 +65,85 @@ func main() {
// ¥1,234,567
}
```
+
+### Pretty
+
+返回pretty JSON字符串.
+
+函数签名:
+
+```go
+func Pretty(v any) (string, error)
+```
+
+示例:
+
+```go
+package main
+
+import (
+ "fmt"
+ "github.com/duke-git/lancet/v2/formatter"
+)
+
+func main() {
+ result1, _ := formatter.Pretty([]string{"a", "b", "c"})
+ result2, _ := formatter.Pretty(map[string]int{"a": 1})
+
+ fmt.Println(result1)
+ fmt.Println(result2)
+
+ // Output:
+ // [
+ // "a",
+ // "b",
+ // "c"
+ // ]
+ // {
+ // "a": 1
+ // }
+}
+```
+
+### PrettyToWriter
+
+Pretty encode数据到writer。
+
+函数签名:
+
+```go
+func PrettyToWriter(v any, out io.Writer) error
+```
+
+示例:
+
+```go
+package main
+
+import (
+ "fmt"
+ "github.com/duke-git/lancet/v2/formatter"
+)
+
+func main() {
+ type User struct {
+ Name string `json:"name"`
+ Aage uint `json:"age"`
+ }
+ user := User{Name: "King", Aage: 10000}
+
+ buf := &bytes.Buffer{}
+ err := formatter.PrettyToWriter(user, buf)
+
+ fmt.Println(buf)
+ fmt.Println(err)
+
+ // Output:
+ // {
+ // "name": "King",
+ // "age": 10000
+ // }
+ //
+ //
+}
+```
diff --git a/formatter/formatter.go b/formatter/formatter.go
index d88622a..30ccadb 100644
--- a/formatter/formatter.go
+++ b/formatter/formatter.go
@@ -5,7 +5,9 @@
package formatter
import (
+ "encoding/json"
"fmt"
+ "io"
"github.com/duke-git/lancet/v2/convertor"
"github.com/duke-git/lancet/v2/strutil"
@@ -44,3 +46,23 @@ func Comma[T constraints.Float | constraints.Integer | string](value T, symbol s
return ""
}
+
+// Pretty data to JSON string.
+// Play: todo
+func Pretty(v any) (string, error) {
+ out, err := json.MarshalIndent(v, "", " ")
+ return string(out), err
+}
+
+// PrettyToWriter pretty encode data to writer.
+// Play: todo
+func PrettyToWriter(v any, out io.Writer) error {
+ enc := json.NewEncoder(out)
+ enc.SetIndent("", " ")
+
+ if err := enc.Encode(v); err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/formatter/formatter_example_test.go b/formatter/formatter_example_test.go
index 53162ad..ec14587 100644
--- a/formatter/formatter_example_test.go
+++ b/formatter/formatter_example_test.go
@@ -1,6 +1,9 @@
package formatter
-import "fmt"
+import (
+ "bytes"
+ "fmt"
+)
func ExampleComma() {
result1 := Comma("123", "")
@@ -16,3 +19,43 @@ func ExampleComma() {
// $12,345
// ¥1,234,567
}
+
+func ExamplePretty() {
+ result1, _ := Pretty([]string{"a", "b", "c"})
+ result2, _ := Pretty(map[string]int{"a": 1})
+
+ fmt.Println(result1)
+ fmt.Println(result2)
+
+ // Output:
+ // [
+ // "a",
+ // "b",
+ // "c"
+ // ]
+ // {
+ // "a": 1
+ // }
+}
+
+func ExamplePrettyToWriter() {
+ type User struct {
+ Name string `json:"name"`
+ Aage uint `json:"age"`
+ }
+ user := User{Name: "King", Aage: 10000}
+
+ buf := &bytes.Buffer{}
+ err := PrettyToWriter(user, buf)
+
+ fmt.Println(buf)
+ fmt.Println(err)
+
+ // Output:
+ // {
+ // "name": "King",
+ // "age": 10000
+ // }
+ //
+ //
+}
diff --git a/formatter/formatter_test.go b/formatter/formatter_test.go
index 0ec05d9..ed31290 100644
--- a/formatter/formatter_test.go
+++ b/formatter/formatter_test.go
@@ -1,6 +1,7 @@
package formatter
import (
+ "bytes"
"testing"
"github.com/duke-git/lancet/v2/internal"
@@ -26,3 +27,54 @@ func TestComma(t *testing.T) {
assert.Equal("12,345,678.9", Comma(12345678.9, ""))
assert.Equal("123,456,789,000", Comma(123456789000, ""))
}
+
+func TestPretty(t *testing.T) {
+ assert := internal.NewAssert(t, "TestPretty")
+
+ cases := []any{
+ "",
+ "abc",
+ 123,
+ []string{"a", "b", "c"},
+ map[string]int{"a": 1},
+ struct {
+ Abc int `json:"abc"`
+ }{Abc: 123},
+ }
+
+ expects := []string{
+ "\"\"",
+ `"abc"`,
+ "123",
+ "[\n \"a\",\n \"b\",\n \"c\"\n]",
+ "{\n \"a\": 1\n}",
+ "{\n \"abc\": 123\n}",
+ }
+
+ for i, v := range cases {
+ result, err := Pretty(v)
+
+ assert.IsNil(err)
+
+ t.Log("result -> ", result)
+ assert.Equal(expects[i], result)
+ }
+}
+
+func TestPrettyToWriter(t *testing.T) {
+ assert := internal.NewAssert(t, "TestPrettyToWriter")
+
+ type User struct {
+ Name string `json:"name"`
+ Aage uint `json:"age"`
+ }
+ user := User{Name: "King", Aage: 10000}
+
+ expects := "{\n \"name\": \"King\",\n \"age\": 10000\n}\n"
+
+ buf := &bytes.Buffer{}
+ err := PrettyToWriter(user, buf)
+
+ assert.IsNil(err)
+ assert.Equal(expects, buf.String())
+}