Procurando por uma função que string
pegará um de Json como entrada e o formatará com quebras de linha e recuos. A validação seria um bônus, mas não é necessária, e não preciso analisá-la em um objeto nem nada.
Alguém conhece essa biblioteca?
Entrada de amostra:
{"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
fonte
fonte
Respostas:
Atualizei a versão antiga, agora ela deve suportar valores não citados, como inteiros e booleanos.
Refatorei a versão anterior e obtive a versão final: o código é mais curto e mais limpo. Requer apenas um método de extensão. O mais importante: consertou alguns bugs.
fonte
"url":"url('http://google.com')"
formatar para"url":"url('http : //google.com')"
. espaços são adicionados antes e depois do segundo ":" que está errado..ToList()
no emIEnumerable
vez de criar um novo método? se você estiver usandoMoreLinq
em seu projeto, isso também oferecerá suporte.ForEach()
prontoIEnumerable
para uso.Você também pode usar a biblioteca Newtonsoft.Json para isso e chamar SerializeObject com o enum Formatting.Indented -
Documentação: serializar um objeto
Atualizar -
Apenas tentei de novo. Tenho certeza que isso costumava funcionar - talvez tenha mudado em uma versão posterior ou talvez eu esteja apenas imaginando coisas. De qualquer forma, conforme os comentários abaixo, não funciona como esperado. No entanto, eles têm (apenas testado no linqpad). O primeiro é dos comentários, o segundo é um exemplo que encontrei em outro lugar no SO -
fonte
var obj = JsonConvert.DeserializeObject(jsonString); var formatted = JsonConvert.SerializeObject(obj, Formatting.Indented)
(ou seja, desserializar em um objeto temporário e, em seguida, voltar ao json) - realmente não é o método mais eficiente, mas pelo menos funcionou!Amostra mais curta para a biblioteca json.net.
PS: Você pode envolver o texto json formatado com tag para imprimir como está na página html.
fonte
Aqui está uma versão compacta de um embelezador JSON.
Saídas:
fonte
Ainda mais simples que acabei de escrever:
Extensões necessárias:
Saída de amostra:
fonte
"url":"url('http://google.com')"
será o formato para"url":"url('http : //google.com')"
.Já existem muitas respostas excelentes aqui que usam Newtonsoft.JSON , mas aqui está mais uma que usa
JObject.Parse
em combinação comToString()
, uma vez que ainda não foi mencionada:fonte
Fiquei muito impressionado com o formatador JSON compacto de Vince Panuccio .
Aqui está uma versão melhorada que uso agora:
Ele corrige os seguintes problemas:
Saídas:
fonte
O principal motivo para escrever sua própria função é que os frameworks JSON geralmente executam a análise de strings em tipos .net e os convertem de volta em string, o que pode resultar na perda das strings originais. Por exemplo 0,0002 torna-se 2E-4
Eu não posto minha função (é quase igual a outra aqui), mas aqui estão os casos de teste
fonte
Você precisa pular
\r
e\n
noPrettyPrint()
. A saída parece engraçada, pois já existem alguns crlfs (ou a fonte já foi formatada).fonte
Corrigido ... um pouco.
crédito[link morto]fonte
Como Benjymous apontou, você pode usar Newtonsoft.Json com um objeto temporário e desserializar / serializar.
fonte
Todos os créditos são para Frank Tzanabetis. No entanto, este é o exemplo direto mais curto, que também sobrevive no caso de string vazia ou string JSON original quebrada:
fonte
Isso colocará cada item em uma nova linha
VB.NET
C #
fonte
Essa é uma variante da resposta aceita que gosto de usar. As partes comentadas resultam no que considero um formato mais legível (você precisaria comentar o código adjacente para ver a diferença):
fonte
Basta usar
JsonDocument
eUtf8JsonWriter
. Nenhuma biblioteca de terceiros necessária. Nenhum objeto de destino para desserializaçãojsonString
necessário.fonte
JsonDocument.Parse
faz? Certamente isso o desserializa?J Bryan Price, um bom exemplo, mas há deficiências
após a formatação
preconceito impróprio :(
fonte
Exemplo
fonte
Esta versão produz JSON que é mais compacto e, na minha opinião, mais legível, pois você pode ver mais de uma vez. Ele faz isso formatando a camada mais profunda embutida ou como uma estrutura de matriz compacta.
O código não tem dependências, mas é mais complexo.
O código segue
A função permite que você especifique um ponto de partida para o recuo porque eu uso isso como parte de um processo que monta arquivos de backup formatados em JSON muito grandes.
fonte