Szukam funkcji, która przyjmie string
Json jako dane wejściowe i sformatuje ją za pomocą podziałów wierszy i wcięć. Walidacja byłaby premią, ale nie jest konieczna i nie muszę jej analizować na obiekt ani nic.
Czy ktoś wie o takiej bibliotece?
Przykładowe dane wejściowe:
{"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
źródło
źródło
Odpowiedzi:
To zadziałało dla mnie przy użyciu System.Text.Json w .Net Core 3.1
źródło
Zaktualizowałem starą wersję, teraz powinna obsługiwać wartości niecytowane, takie jak liczby całkowite i wartości logiczne.
Przerobiłem poprzednią wersję i otrzymałem ostateczną wersję: kod jest krótszy i bardziej przejrzysty. Wymagają tylko jednej metody rozszerzenia. Najważniejsze: naprawiono kilka błędów.
źródło
"url":"url('http://google.com')"
formatuj na"url":"url('http : //google.com')"
. spacje są dodawane przed i po drugim znaku „:”, co jest błędne..ToList()
naIEnumerable
zamiast tworzenia nowej metody? jeśli używaszMoreLinq
w swoim projekcie, będzie to również obsługiwać.ForEach()
poIEnumerable
wyjęciu z pudełka.Możesz również użyć do tego biblioteki Newtonsoft.Json i wywołać SerializeObject z wyliczeniem Formatting.Indented -
Dokumentacja: Serializacja obiektu
Aktualizacja -
Po prostu spróbowałem ponownie. Całkiem pewien, że to działało - być może zmieniło się w kolejnej wersji, a może po prostu sobie coś wyobrażam. W każdym razie, zgodnie z poniższymi komentarzami, nie działa to zgodnie z oczekiwaniami. Te jednak robią (właśnie przetestowane w linqpadzie). Pierwsza pochodzi z komentarzy, druga to przykład, który znalazłem gdzie indziej w SO -
źródło
var obj = JsonConvert.DeserializeObject(jsonString); var formatted = JsonConvert.SerializeObject(obj, Formatting.Indented)
(tj. Deserializacja do obiektu tymczasowego, a następnie z powrotem do json) - naprawdę nie jest to najbardziej wydajna metoda, ale przynajmniej zadziałała!Krótszy przykład dla biblioteki json.net.
PS: Możesz zawinąć sformatowany tekst json tagiem, aby wydrukować go tak, jak jest na stronie html.
źródło
Oto kompaktowa wersja narzędzia upiększającego JSON.
Wyjścia:
źródło
Jeszcze prostsza, którą właśnie napisałem:
Niezbędne rozszerzenia:
Przykładowe dane wyjściowe:
źródło
"url":"url('http://google.com')"
zostanie sformatowany na"url":"url('http : //google.com')"
.Jest już tutaj kilka świetnych odpowiedzi, które używają Newtonsoft.JSON , ale tutaj jest jeszcze jedna, która używa
JObject.Parse
w połączeniu zToString()
, ponieważ nie została jeszcze wspomniana:źródło
Byłem bardzo pod wrażeniem kompaktowego JSON formater przez Vince Panuccio .
Oto ulepszona wersja, której teraz używam:
Rozwiązuje następujące problemy:
Wyjścia:
źródło
Głównym powodem pisania własnej funkcji jest to, że frameworki JSON zwykle przetwarzają ciągi znaków na typy .net i konwertują je z powrotem na ciąg, co może skutkować utratą oryginalnych ciągów. Na przykład 0,0002 staje się 2E-4
Nie publikuję mojej funkcji (tutaj jest prawie taka sama jak inne), ale tutaj są przypadki testowe
źródło
Wszystkie kredyty należą się Frankowi Tzanabetisowi. Jest to jednak najkrótszy bezpośredni przykład, który przetrwa również w przypadku pustego ciągu lub zepsutego oryginalnego ciągu JSON:
źródło
Trzeba przeskoczyć
\r
i\n
wPrettyPrint()
. Wynik wygląda śmiesznie, jeśli są już jakieś crlf (lub źródło zostało już sformatowane).źródło
Naprawiłem to ... trochę.
kredyt[martwy link]źródło
Jak zauważył benjymous , możesz użyć Newtonsoft.Json z tymczasowym obiektem i deserializować / serializować.
źródło
Spowoduje to umieszczenie każdego elementu w nowej linii
VB.NET
DO#
źródło
To jest wariant zaakceptowanej odpowiedzi, której lubię używać. Skomentowane części skutkują tym, co uważam za bardziej czytelny format (aby zobaczyć różnicę, musisz skomentować sąsiedni kod):
źródło
Po prostu użyj
JsonDocument
iUtf8JsonWriter
. Nie jest wymagana żadna biblioteka innej firmy. Żaden obiekt docelowy do deserializacji nie jestjsonString
wymagany.źródło
JsonDocument.Parse
robi? Na pewno to deserializuje?J Bryan Price, dobry przykład, ale są wady
po sformatowaniu
niewłaściwe nastawienie :(
źródło
Przykład
źródło
Ta wersja generuje JSON, który jest bardziej zwarty i moim zdaniem bardziej czytelny, ponieważ można zobaczyć więcej na raz. Czyni to poprzez formatowanie najgłębszej warstwy w wierszu lub jako zwartą strukturę tablicy.
Kod nie ma zależności, ale jest bardziej złożony.
Kod następuje
Funkcja umożliwia określenie punktu początkowego wcięcia, ponieważ używam go jako części procesu, który składa bardzo duże pliki kopii zapasowych w formacie JSON.
źródło