Кто-нибудь знает простой способ печатать вывод JSON в Go?
Стандартный пакет http://golang.org/pkg/encoding/json/ , похоже, не включает в себя функциональность для этого (РЕДАКТИРОВАТЬ: да, смотрите принятый ответ), и быстрый Google не обнаруживает ничего очевидного.
Используемые мной способы используют как красивую печать результата, так json.Marshal
и просто форматирование строки, полной JSON, откуда угодно, поэтому ее легче читать в целях отладки.
json
go
pretty-print
Брэд Пибоди
источник
источник
{name: "value"}
что не все будет в порядке, несмотря на то , что большинство интерпретаторов Javascript его используют . Только{"name": "value"}
будет работать с функциями библиотеки Go JSON.Ответы:
Под красивым шрифтом я предполагаю, что вы имеете в виду отступ,
скорее, чем
Самый простой способ сделать это с помощью
MarshalIndent
, который позволит вам указать, как вы хотели бы, чтобы отступ с помощьюindent
аргумента. Таким образом,json.MarshalIndent(data, "", " ")
будет довольно печатать, используя четыре пробела для отступа.источник
json.MarshalIndent(data, "", "\t")
если вы хотите вкладки.json.MarshalIndent(data, "", "🐱")
если вы хотите кошек. извинитеjson.MarshalIndent(data, "", "\t🐱")
если вы хотите ... полосатых кошек ... извинитеПринятый ответ хорош, если у вас есть объект, который вы хотите превратить в JSON. В вопросе также упоминается красивая печать любой строки JSON, и это то, что я пытался сделать. Я просто хотел записать немного JSON из запроса POST (в частности, отчет о нарушении CSP ).
Чтобы использовать
MarshalIndent
, вы должны были быUnmarshal
в объект. Если тебе это нужно, дерзай, а я нет. Если вам просто нужно распечатать байтовый массив, обычныйIndent
ваш друг.Вот чем я закончил:
источник
Для лучшего использования памяти, я думаю, это лучше:
источник
SetIndent
добавил прибудете в последнее время ? Это по сути неизвестно большинству.SetIndent
(первоначально называлсяIndent
), по- видимому добавил марта 2016 и выпущен в Go 1.7, которая была около 3 -х лет после того, как этот вопрос был первоначально спросил: github.com/golang/go/commit/... github.com/golang/go/commit/ …Я был разочарован отсутствием быстрого, высококачественного способа упорядочить JSON в цветную строку в Go, поэтому я написал свой собственный Marshaller под названием ColorJSON .
С его помощью вы можете легко получить такой вывод, используя очень мало кода:
Я пишу документацию для этого сейчас, но я был рад поделиться своим решением.
источник
Редактировать Оглядываясь назад, это не идиоматический Go. Маленькие вспомогательные функции, подобные этой, добавляют дополнительный уровень сложности. В общем, философия Go предпочитает включать 3 простые линии над 1 хитрой строкой.
Как упомянул @robyoder,
json.Indent
это путь. Думаю, я бы добавил эту маленькуюprettyprint
функцию:https://go-sandbox.com/#/R4LWpkkHIN или http://play.golang.org/p/R4LWpkkHIN
источник
Вот что я использую. Если он не может распечатать JSON, он просто возвращает исходную строку. Полезно для печати ответов HTTP, которые должны содержать JSON.
источник
Вот мое решение :
источник
Простой в продаже симпатичный принтер в Go. Можно скомпилировать его в двоичный файл через:
Он читает из стандартного ввода, пишет в стандартный вывод и позволяет установить отступ:
Это позволяет запускать команды bash, такие как:
источник
источник
Я новичок, но вот что я собрал:
Это выполнение функции, и просто стандартное
Код:
источник
источник