Vous recherchez une fonction qui prendra un string
de Json en entrée et le formatera avec des sauts de ligne et des indentations. La validation serait un bonus, mais ce n'est pas nécessaire, et je n'ai pas besoin de l'analyser en un objet ou quoi que ce soit.
Quelqu'un connaît une telle bibliothèque?
Exemple d'entrée:
{"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
la source
la source
Réponses:
Cela a fonctionné pour moi en utilisant System.Text.Json dans .Net Core 3.1
la source
J'ai mis à jour l'ancienne version, maintenant elle devrait prendre en charge les valeurs sans guillemets telles que les entiers et les booléens.
J'ai refactoré la version précédente et j'ai obtenu la version finale: le code est plus court et plus propre. Nécessite une seule méthode d'extension. Le plus important: correction de quelques bugs.
la source
"url":"url('http://google.com')"
formater en"url":"url('http : //google.com')"
. des espaces sont ajoutés avant et après le deuxième ":", ce qui est faux..ToList()
auIEnumerable
lieu de créer une nouvelle méthode? si vous utilisezMoreLinq
dans votre projet, il appuiera également.ForEach()
surIEnumerable
hors de la boîte.Vous pouvez également utiliser la bibliothèque Newtonsoft.Json pour cela et appeler SerializeObject avec l'énumération Formatting.Indented -
Documentation: sérialiser un objet
Mettre à jour -
Je viens de réessayer. À peu près sûr que cela fonctionnait - peut-être que cela a changé dans une version ultérieure ou peut-être que j'imagine simplement des choses. Quoi qu'il en soit, selon les commentaires ci-dessous, cela ne fonctionne pas tout à fait comme prévu. Ceux-ci le font cependant (juste testés dans linqpad). Le premier est tiré des commentaires, le deuxième est un exemple que j'ai trouvé ailleurs dans SO -
la source
var obj = JsonConvert.DeserializeObject(jsonString); var formatted = JsonConvert.SerializeObject(obj, Formatting.Indented)
(c'est-à-dire désérialiser dans un objet temporaire, puis de nouveau dans json) - vraiment pas la méthode la plus efficace, mais cela a au moins fonctionné!Échantillon plus court pour la bibliothèque json.net.
PS: Vous pouvez envelopper le texte json formaté avec une balise pour l'imprimer tel quel sur la page html.
la source
Voici une version compacte d'un embellisseur JSON.
Les sorties:
la source
Encore plus simple que je viens d'écrire:
Extensions nécessaires:
Exemple de sortie:
la source
"url":"url('http://google.com')"
sera formaté en"url":"url('http : //google.com')"
.Il y a déjà un tas de bonnes réponses ici qui utilisent Newtonsoft.JSON , mais en voici une autre qui utilise
JObject.Parse
en combinaison avecToString()
, puisque cela n'a pas encore été mentionné:la source
J'ai été très impressionné par le formateur JSON compact de Vince Panuccio .
Voici une version améliorée que j'utilise maintenant:
Il résout les problèmes suivants:
Les sorties:
la source
La principale raison de l'écriture de votre propre fonction est que les frameworks JSON analysent généralement les chaînes en types .net et les reconvertissent en chaîne, ce qui peut entraîner la perte des chaînes d'origine. Par exemple 0,0002 devient 2E-4
Je ne poste pas ma fonction (c'est à peu près la même chose que les autres ici) mais voici les cas de test
la source
Vous devez sauter
\r
et\n
dansPrettyPrint()
. La sortie semble drôle car certains crlf sont déjà présents (ou la source était déjà formatée).la source
Corrigé ... un peu.
crédit[lien mort]la source
Comme benjymous l'a souligné, vous pouvez utiliser Newtonsoft.Json avec un objet temporaire et désérialiser / sérialiser.
la source
Tous les crédits sont à Frank Tzanabetis. Cependant, c'est l'exemple direct le plus court, qui survit également en cas de chaîne vide ou de chaîne JSON d'origine cassée:
la source
Cela mettra chaque article sur une nouvelle ligne
VB.NET
C #
la source
C'est une variante de la réponse acceptée que j'aime utiliser. Les parties commentées aboutissent à ce que je considère comme un format plus lisible (vous auriez besoin de commenter le code adjacent pour voir la différence):
la source
Utilisez simplement
JsonDocument
etUtf8JsonWriter
. Aucune bibliothèque tierce requise. Aucun objet cible pour la désérialisation pourjsonString
requis.la source
JsonDocument.Parse
? Cela le désérialise sûrement?J Bryan Price, un bon exemple, mais il y a des lacunes
après le formatage
biais incorrect :(
la source
Exemple
la source
Cette version produit du JSON qui est plus compact et à mon avis plus lisible puisque vous pouvez en voir plus à la fois. Il le fait en formatant la couche la plus profonde en ligne ou comme une structure de tableau compact.
Le code n'a pas de dépendances mais est plus complexe.
Le code suit
La fonction vous permet de spécifier un point de départ pour l'indentation car je l'utilise dans le cadre d'un processus qui assemble de très gros fichiers de sauvegarde au format JSON.
la source