# #json #go #encoding-json-go
Вопрос:
Мы разработали API «экспорта», который позволяет пользователям загружать файл json с информацией. Json-это массив. Теперь мы сталкиваемся с небольшой дилеммой.
Звоните json.Marshal
напрямую (без отступа, не так удобно для пользователя)
[{"foo":"bar"},{"foo1":"bar1"}]
Позвоните json.MarshalIndent
или json.Indent(dst, src, "", " ")
(слишком большой отступ)
[
{
"foo": "bar"
},
{
"foo1": "bar1"
}
]
Я хочу такого рода
[
{"foo": "bar"},
{"foo1": "bar1"}
]
Есть какие-нибудь идеи?
Комментарии:
1.
encoding/json
может либо отступать, либо нет. Форматер, который бы понимал, почему вы произвольно хотите, чтобы некоторые строки были отформатированы, а другие-нет, был бы намного сложнее, чем то, что требуется в stdlib или, вероятно, в любой сторонней библиотеке. Вам придется написать свой собственный, если это важно для вашего варианта использования.
Ответ №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]")
}