Ruby on rails 参数化JSON密钥命名
我有以下JSON:Ruby on rails 参数化JSON密钥命名,ruby-on-rails,json,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Json,Ruby,Ruby On Rails 3,Ruby On Rails 4,我有以下JSON: { my_json: { id: 1, name: "John" } } 如何通过参数化自定义密钥名称,如: def jsonize(custom_key="id") { my_json: { "#{custom_key}": 1, name: "John" } } end 将输出为: 情景1: => jsonize 输出: { my_json: { id: 1, name:
{
my_json: {
id: 1,
name: "John"
}
}
如何通过参数化自定义密钥名称,如:
def jsonize(custom_key="id")
{
my_json: {
"#{custom_key}": 1,
name: "John"
}
}
end
将输出为:
情景1:
=> jsonize
输出:
{
my_json: {
id: 1,
name: "John"
}
}
{
my_json: {
value: 1,
name: "John"
}
}
情景2:
=> jsonize("value")
输出:
{
my_json: {
id: 1,
name: "John"
}
}
{
my_json: {
value: 1,
name: "John"
}
}
您可以使用“:”来分隔符号键和值,在示例中使用“=>”:
def jsonize(custom_key="id")
{
my_json: {
"#{custom_key}" => 1,
name: "John"
}
}
end
您只需将其转换为
symbol
并使用hash\u-rocket
语法即可获得预期结果
def jsonize(custom_key = "id")
{
my_json: {
custom_key.to_sym => 1,
name: "John"
}
}
end
#=> jsonize('foo')
#=> {
#=> :my_json => {
#=> :foo => 1,
#=> :name => "John"
#=> }
#=> }
哈希火箭语法自古以来就在Ruby中使用:
{ :foo => 1, "bar" => 2 }
Ruby 1.9(我认为)引入了一种新的冒号快捷语法,只用于符号(同时对任何键类型保留哈希火箭):
Ruby 2.2(我认为)引入了用这种语法表示字符串的可能性:
{ "foo": 1, "bar" => 2 }
所有这些都做同样的事情。您所做的是完全符合语法的Ruby代码——在一个全新的Ruby中。在旧版Rubies中,您需要使用旧的可靠哈希火箭语法:
{ "foo".to_sym => 1, "bar" => 2 }
现在您已经有了一个字符串,可以执行法线插值:
{ "f#{'o' * 2}".to_sym => 1, "bar" => 2 }
在你的情况下,你可以写
但是,所有这些都是完全不必要的,因为您可以在任何Ruby中简单地编写:
更妙的是,由于您只是将所有内容立即转换为JSON,因此您甚至不需要符号化键;所以这两个表达式将有相同的结果:
{ custom_key.to_sym => 1 }.to_json
{ custom_key => 1 }.to_json
(还要注意,作为JSON示例的输入和输出实际上都不是JSON,也不会是
。to_JSON
输出。在JSON中,与普通JavaScript对象文字相反,键必须是双引号,这就是to_JSON
将产生它的方式。不过,您的输入是一个Ruby有效的Ruby哈希。)您的代码将正常工作,并且正确无误。这是打字错误吗<代码>“{custome_key}”:1,它应该是“{custom_key}”:1,
。您好@GokulM,谢谢您指出错误。但这不是我的意思。当我运行该方法时,它抛出一个错误语法错误,意外的“:”,期望=>“#{custome_key}”:1,
,因为它不应该这样构造。问题是,我可以进行参数化密钥命名吗?:)谢谢这是正确的,但我必须选择接受的答案。所以我会投票赞成你的答案。
{ custom_key.to_sym => 1 }.to_json
{ custom_key => 1 }.to_json