32 lines
644 B
Go
32 lines
644 B
Go
package format
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
)
|
|
|
|
func FormatJSON(input string) string {
|
|
var data any
|
|
if err := json.Unmarshal([]byte(input), &data); err != nil {
|
|
var out bytes.Buffer
|
|
if err := json.Indent(&out, []byte(input), "", " "); err == nil {
|
|
return out.String()
|
|
}
|
|
return input
|
|
}
|
|
|
|
var out bytes.Buffer
|
|
encoder := json.NewEncoder(&out)
|
|
encoder.SetEscapeHTML(false)
|
|
encoder.SetIndent("", " ")
|
|
if err := encoder.Encode(data); err != nil {
|
|
return input
|
|
}
|
|
|
|
formatted := out.String()
|
|
if len(formatted) > 0 && formatted[len(formatted)-1] == '\n' {
|
|
formatted = formatted[:len(formatted)-1]
|
|
}
|
|
return formatted
|
|
}
|