Как упоминал @Vovimir Kovpak, вы не можете сделать это со стандартной библиотекой, по крайней мере, на данный момент.
Хотя, вдохновленный этим , вы можетедостичь чего-то близкого к тому, что вы хотите сделатьВыезд MarshalIndentSnakeCase
:
func MarshalIndentSnakeCase(v interface{}, prefix, indent string) ([]byte, error) {
b, err := json.MarshalIndent(v, prefix, indent)
if err != nil {
return nil, err
}
x := convertKeys(b) // Here convert all keys from CamelCase to snake_case
buf := &bytes.Buffer{}
err = json.Indent(buf, []byte(x), prefix, indent)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
Вниз:
- Вы должны сделать то же самое в противоположном направлении, чтобы Unmashalling работал.
- Порядокэлементов теряется из-за использования
map
внутри convertKeys()
.
Попробуйте на Go Playground .