Gostaria que minha saída JSON no Ruby on Rails fosse "bonita" ou bem formatada.
No momento, eu ligo to_json
e meu JSON está tudo em uma linha. Às vezes, pode ser difícil ver se há um problema no fluxo de saída JSON.
Existe uma maneira de configurar para tornar meu JSON "bonito" ou bem formatado no Rails?
ruby-on-rails
ruby
json
pretty-print
JP Richardson
fonte
fonte
y my_json
irá formatar muito bem as coisas, se você quiser uma solução rápida.undefined method 'y' for main:Object
y
está disponível no console de trilhos.Respostas:
Use a
pretty_generate()
função, criada em versões posteriores do JSON. Por exemplo:O que você recebe:
fonte
format.json { render :json => @whatever }
format.json { render :json => JSON.pretty_generate(my_json) }
.Graças ao Rack Middleware e ao Rails 3, você pode gerar bastante JSON para cada solicitação sem alterar nenhum controlador do seu aplicativo. Eu escrevi esse trecho de middleware e recebo JSON bem impresso no navegador e na
curl
saída.O código acima deve ser colocado no
app/middleware/pretty_json_response.rb
seu projeto Rails. E a etapa final é registrar o middleware emconfig/environments/development.rb
:Não recomendo usá-lo
production.rb
. A correção JSON pode degradar o tempo de resposta e a taxa de transferência do seu aplicativo de produção. Eventualmente, uma lógica extra, como o cabeçalho 'X-Pretty-Json: true', pode ser introduzida para acionar a formatação de solicitações de curvatura manual sob demanda.(Testado com Rails 3.2.8-5.0.0, Ruby 1.9.3-2.2.0, Linux)
fonte
obj = JSON.parse(response.body.first)
para fazê-lo funcionar.Rack::Utils.bytesize(pretty_str).to_s
parapretty_str.bytesize.to_s
e funciona muito bem!A
<pre>
tag em HTML, usada comJSON.pretty_generate
, tornará o JSON bonito na sua visualização. Fiquei tão feliz quando meu ilustre chefe me mostrou isso:fonte
Se você quiser:
Então ... substitua o ActionController :: Renderer for JSON! Basta adicionar o seguinte código ao seu ApplicationController:
fonte
json.respond_to?(:to_h)
or:to_hash
. (2) pretty_generate pode engasgar com coisas que to_json não.Confira Impressão impressionante . Analise a string JSON em um Ruby Hash e exiba-a da seguinte
ap
forma:Com o exposto, você verá:
O Awesome Print também adicionará algumas cores que o Stack Overflow não mostrará.
fonte
Despejando um objeto ActiveRecord no JSON (no console do Rails):
fonte
pp
vez de imprimir na saída padrão, useUser.first.as_json.pretty_inspect
. Funciona bem para mim.Usando
<pre>
código HTML epretty_generate
é um bom truque:fonte
Se você achar que a
pretty_generate
opção incorporada na biblioteca JSON do Ruby não é "bonita" o suficiente, recomendo minha própria gema NeatJSON para sua formatação.Para usá-lo:
e depois use
ao invés de
Assim como o Ruby,
pp
ele mantém objetos e matrizes em uma linha quando eles se ajustam, mas se agrupa em múltiplos conforme necessário. Por exemplo:Ele também suporta uma variedade de opções de formatação para personalizar ainda mais sua saída. Por exemplo, quantos espaços antes / depois dos dois pontos? Antes / depois das vírgulas? Dentro dos colchetes de matrizes e objetos? Deseja classificar as chaves do seu objeto? Deseja que todos os dois pontos estejam alinhados?
fonte
Aqui está uma solução de middleware modificada a partir desta excelente resposta do @gertas . Esta solução não é específica do Rails - ela deve funcionar com qualquer aplicativo Rack.
A técnica de middleware usada aqui, usando #each, é explicada no ASCIIcasts 151: Rack Middleware de Eifion Bedford.
Este código está disponível em app / middleware / pretty_json_response.rb :
Para ativá-lo, adicione-o a config / environment / test.rb e config / environment / development.rb:
Como o @gertas adverte em sua versão desta solução, evite usá-lo na produção. Está um pouco lento.
Testado com Rails 4.1.6.
fonte
fonte
Aqui está minha solução, derivada de outros posts durante minha própria pesquisa.
Isso permite enviar a saída pp e jj para um arquivo, conforme necessário.
fonte
Eu usei a gema CodeRay e funciona muito bem. O formato inclui cores e reconhece muitos formatos diferentes.
Eu usei em uma gema que pode ser usada para depurar APIs de trilhos e funciona muito bem.
A propósito, a gema é chamada de 'api_explorer' ( http://www.github.com/toptierlabs/api_explorer )
fonte
Se você deseja implementar isso rapidamente em uma ação do controlador Rails para enviar uma resposta JSON:
fonte
Se você estiver usando o RABL, poderá configurá-lo conforme descrito aqui para usar JSON.pretty_generate:
Um problema ao usar JSON.pretty_generate é que os validadores de esquema JSON não ficarão mais satisfeitos com suas seqüências de data e hora. Você pode corrigir aqueles em seu config / initializers / rabl_config.rb com:
fonte
fonte
Uso o seguinte, pois considero os cabeçalhos, o status e a saída JSON úteis como um conjunto. A rotina de chamadas é dividida por recomendação de uma apresentação de railscasts em: http://railscasts.com/episodes/151-rack-middleware?autoplay=true
fonte
Variante de impressão bonita:
Resultado:
fonte
Exemplo mais simples, eu poderia pensar em:
Exemplo de console do Rails:
fonte