Ищете функцию, которая будет принимать string
Json в качестве входных данных и форматировать ее с помощью разрывов строк и отступов. Проверка была бы бонусом, но она не обязательна, и мне не нужно разбирать ее на объект или что-то еще.
Кто-нибудь знает такую библиотеку?
Пример ввода:
{"status":"OK", "results":[ {"types":[ "locality", "political"], "formatted_address":"New York, NY, USA", "address_components":[ {"long_name":"New York", "short_name":"New York", "types":[ "locality", "political"]}, {"long_name":"New York", "short_name":"New York", "types":[ "administrative_area_level_2", "political"]}, {"long_name":"New York", "short_name":"NY", "types":[ "administrative_area_level_1", "political"]}, {"long_name":"United States", "short_name":"US", "types":[ "country", "political"]}], "geometry":{"location":{"lat":40.7143528, "lng":-74.0059731}, "location_type":"APPROXIMATE", "viewport":{"southwest":{"lat":40.5788964, "lng":-74.2620919}, "northeast":{"lat":40.8495342, "lng":-73.7498543}}, "bounds":{"southwest":{"lat":40.4773990, "lng":-74.2590900}, "northeast":{"lat":40.9175770, "lng":-73.7002720}}}}]}
c#
json
formatting
mpen
источник
источник
Ответы:
Это сработало для меня, используя System.Text.Json в .Net Core 3.1
источник
Я обновил старую версию, теперь она должна поддерживать значения без кавычек, такие как целые и логические значения.
Я реорганизовал предыдущую версию и получил финальную версию: код короче и чище. Требуется только один метод расширения. Самое главное: исправлены некоторые ошибки.
источник
"url":"url('http://google.com')"
форматирование в"url":"url('http : //google.com')"
. пробелы добавлены до и после второго ":", что неверно..ToList()
наIEnumerable
вместо создания нового метода? если вы используетеMoreLinq
в вашем проекте, это будет также поддерживать.ForEach()
наIEnumerable
из коробки.Вы также можете использовать для этого библиотеку Newtonsoft.Json и вызвать SerializeObject с перечислением Formatting.Indented -
Документация: сериализация объекта
Обновить -
Просто попробовал еще раз. Я почти уверен, что раньше это работало - возможно, это изменилось в следующей версии, или, возможно, я просто воображаю вещи. В любом случае, согласно комментариям ниже, это работает не совсем так, как ожидалось. Однако они есть (только что протестированы в linqpad). Первый из комментариев, второй - это пример, который я нашел в другом месте в SO -
источник
var obj = JsonConvert.DeserializeObject(jsonString); var formatted = JsonConvert.SerializeObject(obj, Formatting.Indented)
(т.е. десериализация во временный объект, затем обратно в json) - действительно не самый эффективный метод, но он, по крайней мере, сработал!Более короткий образец для библиотеки json.net.
PS: Вы можете обернуть форматированный текст json тегом для печати, как на странице html.
источник
Вот компактная версия средства красоты JSON.
Выходы:
источник
Еще более простой, который я только что написал:
Необходимые расширения:
Пример вывода:
источник
"url":"url('http://google.com')"
будет форматироваться в"url":"url('http : //google.com')"
.Здесь уже есть несколько отличных ответов, в которых используется Newtonsoft.JSON , но вот еще один, который используется
JObject.Parse
в сочетании сToString()
, поскольку об этом еще не упоминалось:источник
Я был очень впечатлен компактным JSON форматировщиком от Vince Panuccio .
Вот улучшенная версия, которую я сейчас использую:
Он устраняет следующие проблемы:
Выходы:
источник
Основная причина написания собственной функции заключается в том, что фреймворки JSON обычно выполняют синтаксический анализ строк в типы .net и конвертируют их обратно в строку, что может привести к потере исходных строк. Например, 0,0002 становится 2E-4
Я не публикую свою функцию (здесь она такая же, как и другие), но вот тестовые примеры
источник
Все кредиты принадлежат Фрэнку Цанабетису. Однако это самый короткий прямой пример, который также выживает в случае пустой строки или сломанной исходной строки JSON:
источник
Вам нужно пропустить
\r
и\n
вPrettyPrint()
. Вывод выглядит забавно, потому что уже есть некоторые crlf (или исходный код уже отформатирован).источник
Исправлено ... немного.
кредит[мертвая ссылка]источник
Как указал Бенджимус , вы можете использовать Newtonsoft.Json с временным объектом и десериализовать / сериализовать.
источник
Это поместит каждый элемент в новую строку
VB.NET
C #
источник
Это вариант принятого ответа, который мне нравится использовать. Закомментированные части приводят к тому, что я считаю более читаемым форматом (вам нужно закомментировать соседний код, чтобы увидеть разницу):
источник
Просто используйте
JsonDocument
иUtf8JsonWriter
. Сторонняя библиотека не требуется. Целевой объект для десериализации неjsonString
требуется.источник
JsonDocument.Parse
делает? Конечно, это десериализует его?Дж. Брайан Прайс, хороший пример, но есть недостатки
после форматирования
неправильный уклон :(
источник
пример
источник
Эта версия создает более компактный и, на мой взгляд, более читаемый JSON, поскольку вы можете видеть больше файлов одновременно. Он делает это путем форматирования самого глубокого слоя встроенным или как структура компактного массива.
Код не имеет зависимостей, но более сложный.
Код следует
Функция позволяет указать начальную точку для отступа, потому что я использую это как часть процесса, который собирает очень большие файлы резервных копий в формате JSON.
источник