【问题标题】:How can I create one json object using Jbuilder.new如何使用 Jbuilder.new 创建一个 json 对象
【发布时间】:2016-10-01 23:42:25
【问题描述】:

我正在使用“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 }}

我需要对上述代码进行哪些更改才能实现这一目标

请帮帮我

【问题讨论】:

  • 您的问题不清楚。您的两个 JSON 示例都不是有效的 JSON。由于您想要的输出不是有效的 JSON,因此如何从 JSON 库获取此类输出的问题的答案相当简单:您不能。期间。

标签: ruby-on-rails ruby json jbuilder


【解决方案1】:

你的代码的问题是这个

{排名:{"1-3" => 2,"4-10" => 3, "11-20" => 5 }}

不是一个有效的 JSON 使用 this to 验证你的 JSON

这似乎更像是一个红宝石散列的定义,它使用主键的符号排名和字符串“1-3”......作为二级键

在这里你可以知道如何构建一个有效的 JSON:

http://json.org/

转换简单的 JSON 散列很容易使用 to_json ant 然后使用 gsub 转换字符串为 all 和 sub 为第一个实例匹配这样

这可能是您的结构的有效 JSON

{
    "ranking": {
        "1-3": 2,
        "4-10": 3,
        "11-20": 5
    }
}

那么让我们从

获取最后一个 JSON
irb(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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多