Suchen Sie nach einer Funktion, die string
Json als Eingabe verwendet und mit Zeilenumbrüchen und Einrückungen formatiert. Eine Validierung wäre ein Bonus, ist aber nicht erforderlich, und ich muss sie nicht in ein Objekt oder etwas anderes analysieren.
Kennt jemand eine solche Bibliothek?
Beispieleingabe:
{"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
quelle
quelle
Antworten:
Ich habe die alte Version aktualisiert, jetzt sollte sie nicht zitierte Werte wie Ganzzahlen und Boolesche Werte unterstützen.
Ich habe die vorherige Version überarbeitet und die endgültige Version erhalten: Der Code ist kürzer und sauberer. Benötigen Sie nur eine Erweiterungsmethode. Das Wichtigste: Einige Fehler behoben.
quelle
"url":"url('http://google.com')"
Formatieren auf"url":"url('http : //google.com')"
. Leerzeichen werden vor und nach dem zweiten ":" hinzugefügt, was falsch ist..ToList()
auf demIEnumerable
statt ein neues Verfahren zu schaffen? wenn Sie verwendenMoreLinq
in Ihrem Projekt, das unterstützt auch.ForEach()
aufIEnumerable
aus dem Kasten heraus .Sie können hierfür auch die Newtonsoft.Json- Bibliothek verwenden und SerializeObject mit der Aufzählung Formatting.Indented aufrufen.
Dokumentation: Serialisieren Sie ein Objekt
Update -
Ich habe es einfach noch einmal versucht. Ich bin mir ziemlich sicher, dass dies früher funktioniert hat - vielleicht hat es sich in einer späteren Version geändert oder ich stelle mir nur Dinge vor. Wie auch immer, gemäß den Kommentaren unten funktioniert es nicht ganz wie erwartet. Diese jedoch (nur in Linqpad getestet). Der erste stammt aus den Kommentaren, der zweite ist ein Beispiel, das ich an anderer Stelle in SO gefunden habe -
quelle
var obj = JsonConvert.DeserializeObject(jsonString); var formatted = JsonConvert.SerializeObject(obj, Formatting.Indented)
(dh in ein temporäres Objekt deserialisieren, dann zurück in json) - wirklich nicht die effizienteste Methode, aber das hat zumindest funktioniert!Kürzeres Beispiel für die json.net-Bibliothek.
PS: Sie können den formatierten JSON-Text mit einem Tag versehen, um ihn so zu drucken, wie er sich auf der HTML-Seite befindet.
quelle
Hier ist eine kompakte Version eines JSON-Verschönerers.
Ausgänge:
quelle
Noch einfacher, als ich gerade geschrieben habe:
Notwendige Erweiterungen:
Beispielausgabe:
quelle
"url":"url('http://google.com')"
wird formatiert"url":"url('http : //google.com')"
.Es gibt hier bereits eine Reihe großartiger Antworten, die Newtonsoft.JSON verwenden , aber hier ist eine weitere, die
JObject.Parse
in Kombination mit verwendet wirdToString()
, da dies noch nicht erwähnt wurde:quelle
Der kompakte JSON-Formatierer von Vince Panuccio hat mich sehr beeindruckt .
Hier ist eine verbesserte Version, die ich jetzt benutze:
Es behebt die folgenden Probleme:
Ausgänge:
quelle
Der Hauptgrund für das Schreiben Ihrer eigenen Funktion besteht darin, dass JSON-Frameworks normalerweise das Parsen von Zeichenfolgen in .net-Typen durchführen und diese wieder in Zeichenfolgen konvertieren, was zum Verlust der ursprünglichen Zeichenfolgen führen kann. Zum Beispiel wird 0,0002 zu 2E-4
Ich poste meine Funktion nicht (es ist ziemlich dasselbe wie andere hier), aber hier sind die Testfälle
quelle
Sie müssen überspringen
\r
und\n
inPrettyPrint()
. Die Ausgabe sieht komisch aus, da einige CRLFs bereits vorhanden sind (oder die Quelle bereits formatiert wurde).quelle
Es wurde behoben ... etwas.
Anerkennung[toter Link]quelle
Wie bereits erwähnt , können Sie Newtonsoft.Json mit einem temporären Objekt verwenden und deserialisieren / serialisieren.
quelle
Alle Credits gehen an Frank Tzanabetis. Dies ist jedoch das kürzeste direkte Beispiel, das auch bei leerem String oder gebrochenem Original-JSON-String erhalten bleibt:
quelle
Dadurch wird jedes Element in eine neue Zeile eingefügt
VB.NET
C #
quelle
Dies ist eine Variante der akzeptierten Antwort, die ich gerne verwende. Die kommentierten Teile führen zu einem meiner Meinung nach besser lesbaren Format (Sie müssten den nebenstehenden Code auskommentieren, um den Unterschied zu erkennen):
quelle
Verwenden Sie einfach
JsonDocument
undUtf8JsonWriter
. Keine Bibliothek eines Drittanbieters erforderlich. Kein Zielobjekt für die DeserialisierungjsonString
erforderlich.quelle
JsonDocument.Parse
macht? Sicherlich deserialisiert es das?J Bryan Price, ein gutes Beispiel, aber es gibt Mängel
nach der Formatierung
unangemessene Voreingenommenheit :(
quelle
Beispiel
quelle
Diese Version erzeugt JSON, das kompakter und meiner Meinung nach besser lesbar ist, da Sie mehr auf einmal sehen können. Dazu wird die tiefste Ebene inline oder wie eine kompakte Array-Struktur formatiert.
Der Code hat keine Abhängigkeiten, ist jedoch komplexer.
Der Code folgt
Mit dieser Funktion können Sie einen Startpunkt für den Einzug angeben, da ich diesen als Teil eines Prozesses verwende, der sehr große JSON-formatierte Sicherungsdateien zusammenstellt.
quelle