Как настроить функцию отступа во время json.Marshal?

Мы разработали "экспортный" API, который позволяет пользователям загружать файл json с информацией. JSON - это массив. Теперь мы сталкиваемся с небольшой дилеммой.

Вызов json.Marshal напрямую (без отступов, не очень удобно)

      [{"foo":"bar"},{"foo1":"bar1"}]

Вызов json.MarshalIndent, или json.Indent(dst, src, "", " ") (слишком большой отступ)

      [
  {
    "foo": "bar"
  },
  {
    "foo1": "bar1"
  }
]

Я хочу такого рода

      [
  {"foo": "bar"},
  {"foo1": "bar1"}
]

Любые идеи?

1 ответ

Если структура фиксированная, вы можете вручную закодировать ее следующим образом:

      func MarshalArray(in []Obj, out io.Writer) {
   io.WriteString(out,"[")
   for i,x:=range in {
       if i>0 {
         out.Write([]byte(","))
       }
       io.WriteString("\n  ")
       data,_:=json.Marshal(x)
       io.Write(data)
   }
   io.WriteString(out,"\n]")
}
Другие вопросы по тегам