我正在使用'jbuilder'gem来创建Json。如何创建一个如下所示的Json
{ranking: {"1-3" => 2,"4-10" => 3, "11-20" => 5 }}
哈希
的描述我的数据库中有一些关键字,每个关键字在谷歌搜索结果中都有自己的排名。上面的json键值对表示我的数据库中关键字的数量,它们的排名在1到3之间,4到10和11到20之间。
易于打包
{ranking: {"one_to_three" => 2,"four_to_ten" => 3, "eleven_to_twenty" => 5 }}
使用以下代码。
Jbuilder.new do |ranking|
ranking.one_to_three 2
ranking.four_to_ten 3
ranking.eleven_to_twenty 5
end
但我需要将其转换为
{ranking: {"1-3" => 2,"4-10" => 3, "11-20" => 5 }}
我需要为上面的代码做些什么改变才能实现这个目标
请帮帮我
答案 0 :(得分:0)
您的代码存在的问题是
{ranking:{“1-3”=> 2,“4-10”=> 3,“11-20”=> 5}}
不是有效的JSON使用this to验证您JSON
这似乎更像是使用主密钥的符号排名和对于第二级密钥的字符串“1-3”的红宝石哈希的定义
在这里,您可以了解如何构建有效的JSON:
转换简单的JSON哈希很容易使用to_json ant然后转换字符串使用gsub for all和sub为第一个匹配的实例
这可能是您的结构的有效JSON
{
"ranking": {
"1-3": 2,
"4-10": 3,
"11-20": 5
}
}
所以让我们从
获取最后一个JSONirb(main):001:0> require 'json'
=> true
irb(main):002:0> my_hash = {ranking: {"1-3" => 2,"4-10" => 3, "11-20" => 5 }}
=> {:ranking=>{"1-3"=>2, "4-10"=>3, "11-20"=>5}}
irb(main):003:0> string_json = my_hash.to_json
=> "{\"ranking\":{\"1-3\":2,\"4-10\":3,\"11-20\":5}}"
irb(main):005:0> string_json.gsub(":"," => ").sub(" => ", " : ")
=> "{\"ranking\" : {\"1-3\" => 2,\"4-10\" => 3,\"11-20\" => 5}}"
最后得到你想要的东西,玩排名词“
irb(main):037:0> puts string_json.gsub(":"," => ").sub(" => ", ": ").sub("\"ranking\"","ranking")
{ranking: {"1-3" => 2,"4-10" => 3,"11-20" => 5}}
=> nil