参数化JSON键命名
Parameterized JSON key naming
我有以下 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: "John"
}
}
场景 2:
=> jsonize("value")
输出:
{
my_json: {
value: 1,
name: "John"
}
}
您可以使用“:”来分隔符号键和值,在您的示例中使用“=>”:
def jsonize(custom_key="id")
{
my_json: {
"#{custom_key}" => 1,
name: "John"
}
}
end
您可以将其转换为 symbol
并使用 hash_rocket
语法,您将获得预期的结果
def jsonize(custom_key = "id")
{
my_json: {
custom_key.to_sym => 1,
name: "John"
}
}
end
#=> jsonize('foo')
#=> {
#=> :my_json => {
#=> :foo => 1,
#=> :name => "John"
#=> }
#=> }
hash-rocket 语法在 Ruby 自古就有:
{ :foo => 1, "bar" => 2 }
Ruby 1.9(我认为)为符号引入了一个新的冒号快捷语法(同时保持任何键类型的哈希火箭通用):
{ foo: 1, "bar" => 2 }
Ruby 2.2(我认为)介绍了用这种语法符号化字符串的可能性:
{ "foo": 1, "bar" => 2 }
所有这些都做同样的事情。您正在做的是完全合乎语法的 Ruby 代码——在一个足够新的 Ruby 中。在旧的 Rubies 中,您将需要使用旧的可靠的哈希火箭语法:
{ "foo".to_sym => 1, "bar" => 2 }
现在你已经有了一个字符串,你可以进行正常的插值:
{ "f#{'o' * 2}".to_sym => 1, "bar" => 2 }
在你的情况下,你可以写
{ "#{custom_key}".to_sym => 1 }
然而,所有这些都是完全没有必要的,因为你可以简单地这样写,在any Ruby中:
{ custom_key.to_sym => 1 }
更好的是,因为您只是在之后立即将所有内容都变成 JSON,所以您甚至不需要符号化的键;所以这两个表达式将有相同的结果:
{ custom_key.to_sym => 1 }.to_json
{ custom_key => 1 }.to_json
(另请注意,您所说的 JSON 示例——输入和输出——实际上是 而不是 JSON, .to_json
也不会输出这样的。在 JSON 中,与普通的 JavaScript 对象文字相反,键 必须 是双引号,这就是to_json
会生成它。不过,您的输入是 Ruby 有效的 Ruby 散列。)
我有以下 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: "John"
}
}
场景 2:
=> jsonize("value")
输出:
{
my_json: {
value: 1,
name: "John"
}
}
您可以使用“:”来分隔符号键和值,在您的示例中使用“=>”:
def jsonize(custom_key="id")
{
my_json: {
"#{custom_key}" => 1,
name: "John"
}
}
end
您可以将其转换为 symbol
并使用 hash_rocket
语法,您将获得预期的结果
def jsonize(custom_key = "id")
{
my_json: {
custom_key.to_sym => 1,
name: "John"
}
}
end
#=> jsonize('foo')
#=> {
#=> :my_json => {
#=> :foo => 1,
#=> :name => "John"
#=> }
#=> }
hash-rocket 语法在 Ruby 自古就有:
{ :foo => 1, "bar" => 2 }
Ruby 1.9(我认为)为符号引入了一个新的冒号快捷语法(同时保持任何键类型的哈希火箭通用):
{ foo: 1, "bar" => 2 }
Ruby 2.2(我认为)介绍了用这种语法符号化字符串的可能性:
{ "foo": 1, "bar" => 2 }
所有这些都做同样的事情。您正在做的是完全合乎语法的 Ruby 代码——在一个足够新的 Ruby 中。在旧的 Rubies 中,您将需要使用旧的可靠的哈希火箭语法:
{ "foo".to_sym => 1, "bar" => 2 }
现在你已经有了一个字符串,你可以进行正常的插值:
{ "f#{'o' * 2}".to_sym => 1, "bar" => 2 }
在你的情况下,你可以写
{ "#{custom_key}".to_sym => 1 }
然而,所有这些都是完全没有必要的,因为你可以简单地这样写,在any Ruby中:
{ custom_key.to_sym => 1 }
更好的是,因为您只是在之后立即将所有内容都变成 JSON,所以您甚至不需要符号化的键;所以这两个表达式将有相同的结果:
{ custom_key.to_sym => 1 }.to_json
{ custom_key => 1 }.to_json
(另请注意,您所说的 JSON 示例——输入和输出——实际上是 而不是 JSON, .to_json
也不会输出这样的。在 JSON 中,与普通的 JavaScript 对象文字相反,键 必须 是双引号,这就是to_json
会生成它。不过,您的输入是 Ruby 有效的 Ruby 散列。)