Buscando una función que tome una string
de Json como entrada y la formatee con saltos de línea y sangrías. La validación sería una ventaja, pero no es necesaria, y no necesito analizarla en un objeto ni nada.
¿Alguien sabe de una biblioteca así?
Entrada de muestra:
{"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
fuente
fuente
Respuestas:
Actualicé la versión anterior, ahora debería admitir valores sin comillas como enteros y booleanos.
Refactoricé la versión anterior y obtuve la versión final: el código es más corto y más limpio. Solo requiere un método de extensión. Lo más importante: se corrigieron algunos errores.
fuente
"url":"url('http://google.com')"
formatear en"url":"url('http : //google.com')"
. se agregan espacios antes y después del segundo ":" que es incorrecto..ToList()
enIEnumerable
lugar de crear un nuevo método? si usted está utilizandoMoreLinq
en su proyecto, esto también va a apoyar.ForEach()
enIEnumerable
sacarlo de la caja.También puede usar la biblioteca Newtonsoft.Json para esto y llamar a SerializeObject con la enumeración Formatting.Indented -
Documentación: serializar un objeto
Actualización -
Intenté de nuevo. Estoy bastante seguro de que esto solía funcionar, tal vez cambió en una versión posterior o tal vez solo estoy imaginando cosas. De todos modos, según los comentarios a continuación, no funciona como se esperaba. Sin embargo, estos sí (solo probados en linqpad). El primero es de los comentarios, el segundo es un ejemplo que encontré en otra parte de SO -
fuente
var obj = JsonConvert.DeserializeObject(jsonString); var formatted = JsonConvert.SerializeObject(obj, Formatting.Indented)
(es decir, deserializar en un objeto temporal, luego volver a json) - realmente no es el método más eficiente, ¡pero al menos funcionó!Muestra más corta para la biblioteca json.net.
PD: puede envolver el texto json formateado con la etiqueta para imprimir tal como está en la página html.
fuente
Aquí hay una versión compacta de un embellecedor JSON.
Salidas:
fuente
Incluso uno más simple que acabo de escribir:
Extensiones necesarias:
Salida de muestra:
fuente
"url":"url('http://google.com')"
se formateará en"url":"url('http : //google.com')"
.Ya hay un montón de excelentes respuestas aquí que usan Newtonsoft.JSON , pero aquí hay una más que se usa
JObject.Parse
en combinación conToString()
, ya que aún no se ha mencionado:fuente
Me impresionó mucho el formateador JSON compacto de Vince Panuccio .
Aquí hay una versión mejorada que ahora uso:
Soluciona los siguientes problemas:
Salidas:
fuente
La razón principal para escribir su propia función es que los frameworks JSON generalmente realizan el análisis de cadenas en tipos .net y las convierten nuevamente en cadenas, lo que puede resultar en la pérdida de cadenas originales. Por ejemplo, 0.0002 se convierte en 2E-4
No publico mi función (es bastante igual que otras aquí) pero aquí están los casos de prueba
fuente
Es necesario para saltar
\r
y\n
enPrettyPrint()
. La salida parece graciosa si ya hay algunos crlf presentes (o la fuente ya estaba formateada).fuente
Lo arreglé ... algo.
crédito[enlace muerto]fuente
Como señaló benjymous , puede usar Newtonsoft.Json con un objeto temporal y deserializar / serializar.
fuente
Todos los créditos son para Frank Tzanabetis. Sin embargo, este es el ejemplo directo más corto, que también sobrevive en el caso de una cadena vacía o una cadena JSON original rota:
fuente
Esto pondrá cada artículo en una nueva línea.
VB.NET
C#
fuente
Esta es una variante de la respuesta aceptada que me gusta usar. Las partes comentadas dan como resultado lo que considero un formato más legible (necesitaría comentar el código adyacente para ver la diferencia):
fuente
Solo usa
JsonDocument
yUtf8JsonWriter
. No se requiere biblioteca de terceros. No sejsonString
requiere ningún objeto de destino para la deserialización .fuente
JsonDocument.Parse
hace? ¿Seguro que eso lo deserializa?J Bryan Price, un buen ejemplo, pero hay deficiencias
después de formatear
sesgo inadecuado :(
fuente
Ejemplo
fuente
Esta versión produce JSON que es más compacto y, en mi opinión, más legible, ya que puede ver más a la vez. Lo hace formateando la capa más profunda en línea o como una estructura de matriz compacta.
El código no tiene dependencias pero es más complejo.
El código sigue
La función le permite especificar un punto de partida para la sangría porque lo uso como parte de un proceso que ensambla archivos de respaldo con formato JSON muy grandes.
fuente