我有类似的东西:
{"a":"1","b":"2","c":"3","asefw":"dfsef"}
我想在视图中打印出来。最好的方法是什么?
我尝试将其解析为 JSON 对象并使用JSON.stringify
,但它似乎弄乱了缩进。
有什么建议吗?我不介意 JavaScript 解决方案。
我有类似的东西:
{"a":"1","b":"2","c":"3","asefw":"dfsef"}
我想在视图中打印出来。最好的方法是什么?
我尝试将其解析为 JSON 对象并使用JSON.stringify
,但它似乎弄乱了缩进。
有什么建议吗?我不介意 JavaScript 解决方案。
怎么样:
require 'json'
hash = JSON['{"a":"1","b":"2","c":"3","asefw":"dfsef"}']
puts JSON.pretty_generate(hash)
哪个输出:
{
"a": "1",
"b": "2",
"c": "3",
"asefw": "dfsef"
}
JSON.pretty_generate
它更像是一种调试工具,而不是我在实际生成要发送到浏览器的 JSON 时所依赖的工具。由于添加了空白,“漂亮”方面也意味着“臃肿”和“较慢”,但它有助于诊断和理解结构中的内容,因此它可能很好地满足您的需求。
要记住的一件事是,当浏览器呈现 HTML 时,空格会被吞噬,因此空格会消失。为避免这种情况,您必须将 JSON 输出包装在一个<pre>
块中以保留空格和换行符。像这样的东西应该工作:
<pre>
{
"a": "1",
"b": "2",
"c": "3",
"asefw": "dfsef"
}
</pre>
irb(main)> puts queried_object.pretty_inspect
来自PrettyPrint,所以可能需要require 'pp'
首先让它工作。
这也适用于例如Rails.logger
输出。
<%= raw JSON.pretty_generate(hash).gsub(" "," ") %>
如果您(像我一样)发现pretty_generate
Ruby 的 JSON 库中内置的选项不够“漂亮”,我建议您使用我自己的NeatJSON
gem 来格式化。
要使用它gem install neatjson
,然后使用JSON.neat_generate
而不是JSON.pretty_generate
.
像 Ruby 一样pp
,它会在合适的时候将对象和数组保持在一行,但根据需要包装成多个。例如:
{
"navigation.createroute.poi":[
{"text":"Lay in a course to the Hilton","params":{"poi":"Hilton"}},
{"text":"Take me to the airport","params":{"poi":"airport"}},
{"text":"Let's go to IHOP","params":{"poi":"IHOP"}},
{"text":"Show me how to get to The Med","params":{"poi":"The Med"}},
{"text":"Create a route to Arby's","params":{"poi":"Arby's"}},
{
"text":"Go to the Hilton by the Airport",
"params":{"poi":"Hilton","location":"Airport"}
},
{
"text":"Take me to the Fry's in Fresno",
"params":{"poi":"Fry's","location":"Fresno"}
}
],
"navigation.eta":[
{"text":"When will we get there?"},
{"text":"When will I arrive?"},
{"text":"What time will I get to the destination?"},
{"text":"What time will I reach the destination?"},
{"text":"What time will it be when I arrive?"}
]
}
它还支持各种格式选项,以进一步自定义您的输出。例如,冒号前后有多少个空格?逗号之前/之后?在数组和对象的括号内?您想对对象的键进行排序吗?你想让冒号都排成一行吗?
例如,使用您的示例哈希,您可以获得这些不同的输出,具体取决于您想要什么:
// JSON.neat_generate(o, wrap:true)
{
"a":"1",
"b":"2",
"c":"3",
"asefw":"dfsef"
}
// JSON.neat_generate o, wrap:true, aligned:true
{
"a" :"1",
"b" :"2",
"c" :"3",
"asefw":"dfsef"
}
// JSON.neat_generate o, wrap:true, aligned:true, around_colon:1
{
"a" : "1",
"b" : "2",
"c" : "3",
"asefw" : "dfsef"
}
你可以试试 gem awesome_print效果很好,在你看来写
<%= ap(your_hash, plain: true, indent: 0).html_safe %>
此外,您可以将配置样式的值更改为哈希视图
给定的响应可以正常工作,但是如果您想要更漂亮和更自定义的漂亮哈希,请使用awesome_print
require 'awesome_print'
hash = JSON['{"a":"1","b":"2","c":"3","asefw":"dfsef"}']
ap hash
干杯!
使用纯 Ruby 的漂亮打印Hash
(无宝石)
我遇到了这个线程,试图为自己解决这个问题。
我有一个Hash
我想做漂亮的大文件,但我需要使用 ruby 哈希表示法而不是 JSON。
这是代码+示例
symbol:
等效键puts JSON.pretty_generate(result)
.gsub(/(?:\"|\')(?<key>[^"]*)(?:\"|\')(?=:)(?:\:)/) { |_|
"#{Regexp.last_match(:key)}:"
}
示例 JSON
{
"extensions": {
"heading": "extensions",
"take": "all",
"array_columns": [
"name"
]
},
"tables": {
"heading": "tables",
"take": "all",
"array_columns": [
"name"
]
},
"foreign_keys": {
"heading": "foreign_keys",
"take": "all",
"array_columns": [
"name"
]
},
"all_indexes": {
"heading": "all_indexes",
"take": "all",
"array_columns": [
"name"
]
},
"keys": {
"heading": "keys",
"take": "all",
"array_columns": [
"name"
]
}
}
Ruby 哈希示例
{
extensions: {
heading: "extensions",
take: "all",
array_columns: [
"name"
]
},
tables: {
heading: "tables",
take: "all",
array_columns: [
"name"
]
},
foreign_keys: {
heading: "foreign_keys",
take: "all",
array_columns: [
"name"
]
},
all_indexes: {
heading: "all_indexes",
take: "all",
array_columns: [
"name"
]
},
keys: {
heading: "keys",
take: "all",
array_columns: [
"name"
]
}
}