如何“漂亮” 格式化 JSON 输出
我希望 Ruby on Rails 中的 JSON 输出“漂亮”或格式良好。
现在,我调用 to_json
并且我的 JSON 都在一行上。 有时很难看出 JSON 输出流中是否存在问题。
有没有办法配置让我的 JSON 在 Rails 中“漂亮”或格式良好?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
使用
pretty_generate()
函数,该函数内置于更高版本的 JSON 中。 例如:这会让你:
Use the
pretty_generate()
function, built into later versions of JSON. For example:Which gets you:
HTML 中的
The
<pre>
tag in HTML, used withJSON.pretty_generate
, will render the JSON pretty in your view. I was so happy when my illustrious boss showed me this:查看很棒的打印。 将 JSON 字符串解析为 Ruby Hash,然后使用
ap
显示它,如下所示:通过上面的内容,您将看到:
Awesome Print 还会添加一些 Stack Overflow 不会向您显示的颜色。
Check out Awesome Print. Parse the JSON string into a Ruby Hash, then display it with
ap
like so:With the above, you'll see:
Awesome Print will also add some color that Stack Overflow won't show you.
借助 Rack Middleware 和 Rails 3,您可以为每个请求输出漂亮的 JSON,而无需更改应用程序的任何控制器。 我已经编写了这样的中间件片段,并且在浏览器和
curl
输出中得到了很好的打印 JSON。上面的代码应该放在 Rails 项目的
app/middleware/pretty_json_response.rb
中。最后一步是在 config/environments/development.rb 中注册中间件:
我不建议在 Production.rb 中使用它。 JSON 重新解析可能会降低生产应用程序的响应时间和吞吐量。 最终可能会引入额外的逻辑(例如“X-Pretty-Json:true”标头)来触发按需手动卷曲请求的格式化。
(使用 Rails 3.2.8-5.0.0、Ruby 1.9.3-2.2.0、Linux 进行测试)
Thanks to Rack Middleware and Rails 3 you can output pretty JSON for every request without changing any controller of your app. I have written such middleware snippet and I get nicely printed JSON in browser and
curl
output.The above code should be placed in
app/middleware/pretty_json_response.rb
of your Rails project.And the final step is to register the middleware in
config/environments/development.rb
:I don't recommend to use it in
production.rb
. The JSON reparsing may degrade response time and throughput of your production app. Eventually extra logic such as 'X-Pretty-Json: true' header may be introduced to trigger formatting for manual curl requests on demand.(Tested with Rails 3.2.8-5.0.0, Ruby 1.9.3-2.2.0, Linux)
如果你想处理active_record对象,
puts
就足够了。例如:
puts
puts
,如果您要处理 json 数据, JSON.pretty_generate 是一个很好的替代
方案 示例:
输出:
如果它在 ROR 项目中,我总是更喜欢使用 gem
pry-rails
进行格式化我在rails控制台中的代码而不是awesome_print中的代码太冗长了。pry-rails
示例:它还具有语法突出显示。
if you want to handle active_record object,
puts
is enough.for example:
puts
puts
if you are handle the json data, JSON.pretty_generate is a good alternative
Example:
Output:
if it's in the ROR project, I always prefer to use gem
pry-rails
to format my codes in therails console
rather thanawesome_print
which is too verbose.Example of
pry-rails
:it also has syntax highlight.
这是一个中间件解决方案,修改自@gertas 的这个优秀答案。 该解决方案不是 Rails 特定的——它应该适用于任何 Rack 应用程序。
此处使用的中间件技术(使用 #each)在 ASCIIcasts 151:机架中间件 中进行了解释艾芬·贝德福德。
此代码位于 app/middleware/pretty_json_response.rb 中:
要打开它,请将其添加到 config/environments/test.rb 和 config/environments/development.rb 中:
正如 @gertas 在他的版本中警告的那样避免在生产中使用此解决方案。 有点慢。
使用 Rails 4.1.6 进行测试。
Here is a middleware solution modified from this excellent answer by @gertas. This solution is not Rails specific--it should work with any Rack application.
The middleware technique used here, using #each, is explained at ASCIIcasts 151: Rack Middleware by Eifion Bedford.
This code goes in app/middleware/pretty_json_response.rb:
To turn it on, add this to config/environments/test.rb and config/environments/development.rb:
As @gertas warns in his version of this solution, avoid using it in production. It's somewhat slow.
Tested with Rails 4.1.6.
将 ActiveRecord 对象转储为 JSON(在 Rails 控制台中):
Dumping an ActiveRecord object to JSON (in the Rails console):
如果您发现 Ruby JSON 库内置的
pretty_generate
选项不够“漂亮”,我推荐我自己的 NeatJSON gem 用于您的格式设置。使用它:
然后使用
,而不是
像 Ruby 的
pp
那样,它将在对象和数组适合时将它们保留在一行上,但根据需要包装为多行。 例如:它还支持各种格式化选项以进一步自定义您的输出。 例如,冒号之前/之后有多少个空格? 逗号之前/之后? 数组和对象的括号内? 您想对对象的键进行排序吗? 您希望冒号全部对齐吗?
If you find that the
pretty_generate
option built into Ruby's JSON library is not "pretty" enough, I recommend my own NeatJSON gem for your formatting.To use it:
and then use
instead of
Like Ruby's
pp
it will keep objects and arrays on one line when they fit, but wrap to multiple as needed. For example:It also supports a variety of formatting options to further customize your output. For example, how many spaces before/after colons? Before/after commas? Inside the brackets of arrays and objects? Do you want to sort the keys of your object? Do you want the colons to all be lined up?
使用
Using
<pre>
HTML code andpretty_generate
is good trick:如果您想要:
然后...将 ActionController::Renderer 替换为 JSON! 只需将以下代码添加到您的 ApplicationController 中:
If you want to:
Then ... replace the ActionController::Renderer for JSON! Just add the following code to your ApplicationController:
这是我在搜索过程中从其他帖子中得出的解决方案。
这允许您根据需要将 pp 和 jj 输出发送到文件。
Here's my solution which I derived from other posts during my own search.
This allows you to send the pp and jj output to a file as needed.
如果您希望在 Rails 控制器操作中快速实现此操作以发送 JSON 响应:
If you're looking to quickly implement this in a Rails controller action to send a JSON response:
漂亮的打印变体(Rails):
结果:
Pretty print variant (Rails):
Result:
我使用过 gem CodeRay,效果非常好。 该格式包括颜色,并且它可以识别许多不同的格式。
我已经在可用于调试 Rails API 的 gem 上使用了它,并且效果非常好。
顺便说一句,该 gem 名为“api_explorer”(http://www.github.com/toptierlabs/api_explorer )
I have used the gem CodeRay and it works pretty well. The format includes colors and it recognises a lot of different formats.
I have used it on a gem that can be used for debugging rails APIs and it works pretty well.
By the way, the gem is named 'api_explorer' (http://www.github.com/toptierlabs/api_explorer)
我使用以下内容,因为我发现标头、状态和 JSON 输出很有用
一套。 调用例程根据 Railscasts 演示文稿的建议进行了分解,网址为: http://railscasts .com/episodes/151-rack-middleware?autoplay=true
I use the following as I find the headers, status and JSON output useful as
a set. The call routine is broken out on recommendation from a railscasts presentation at: http://railscasts.com/episodes/151-rack-middleware?autoplay=true
我在 Rails 控制台中有一个 JSON 对象,并且想在控制台中很好地显示它(而不是像一个巨大的连接字符串一样显示),它很简单:
I had a JSON object in the rails console, and wanted to display it nicely in the console (as opposed to displaying like a massive concatenated string), it was as simple as:
如果您使用 RABL,您可以按照 此处 使用 JSON.pretty_generate:
使用 JSON.pretty_generate 的一个问题是 JSON 模式验证器将不再满意您的日期时间字符串。 您可以使用以下命令修复 config/initializers/rabl_config.rb 中的这些内容:
If you are using RABL you can configure it as described here to use JSON.pretty_generate:
A problem with using JSON.pretty_generate is that JSON schema validators will no longer be happy with your datetime strings. You can fix those in your config/initializers/rabl_config.rb with:
我能想到的最简单的例子:
Rails 控制台示例:
Simplest example, I could think of:
Rails console example: