如何在Ruby中手动创建JSON结构?

use*_*621 2 ruby hash json ruby-on-rails

我花了最后几个小时尝试进行手动操作(没有Active Record创建这样的结构,该结构取自API文档:

params_map = '{ "field1" => {"field1a"=>"some text"},
                "field2" => {
                  "field2a"  => "a",
                  "field2b"  => "b",
                  "field2c"  => "c",
                  "field2d"  => {"field2d_a" => "2d_a"},
                  "field2e"  => "e",
                  "items"    => [
                    { "items_a" => "1", 
                      "items_b" => "2",
                      "items_c" => "3",
                      "items_d" => "4"
                    },
                    { "items_e" => "5", 
                      "items_f" => "6",
                      "items_g" => "7",
                      "items_h" => "8"
                    }]
                },
                "field3" => "field3 text",
                "field4" => "field4 text"}'
params_map_eval = eval(params_map)
Run Code Online (Sandbox Code Playgroud)

如何在Ruby中创建它?我尝试使用Hash.new以及作为JSON 将其创建为哈希,但是我未能在大JSON中添加/添加其他字段。

该items会是一个循环,我会从数据库填充它,但我如何在Ruby中创建这种结构?

the*_*Man 5

如果要创建JSON,请使用Ruby随附的JSON标准库:

require 'json'

foo = {
  'a' => 1,
  'b' => [2,3]
}

puts JSON[foo]
# >> {"a":1,"b":[2,3]}
Run Code Online (Sandbox Code Playgroud)

如果您想弄清楚如何基于Ruby哈希或数组创建特定的JSON输出,则可以轻松地做到这一点,只需反转过程并从所需JSON的示例开始,然后让解析器将其转换为基础对象即可:

JSON['{"a":1,"b":[2,3]}'] # => {"a"=>1, "b"=>[2, 3]}
Run Code Online (Sandbox Code Playgroud)

要修改现有的JSON字符串,请将其解析为Ruby对象,对其进行修改,然后再次输出:

bar = JSON['{"a":1,"b":[2,3]}']
bar['c'] = 'more data'

puts JSON[bar]

# >> {"a":1,"b":[2,3],"c":"more data"}
Run Code Online (Sandbox Code Playgroud)

请务必注意您的示例

params_map = '{ "field1" => {"field1a"=>"some text"},
                "field2" => {
                  "field2a"  => "a",
                  "field2b"  => "b",
                  "field2c"  => "c",
                  "field2d"  => {"field2d_a" => "2d_a"},
                  "field2e"  => "e",
                  "items"    => [
                    { "items_a" => "1", 
                      "items_b" => "2",
                      "items_c" => "3",
                      "items_d" => "4"
                    },
                    { "items_e" => "5", 
                      "items_f" => "6",
                      "items_g" => "7",
                      "items_h" => "8"
                    }]
                },
                "field3" => "field3 text",
                "field4" => "field4 text"}'
Run Code Online (Sandbox Code Playgroud)

不是JSON。这是一个字符串:

foo = '{"a" => 1}'
foo.class  # => String
Run Code Online (Sandbox Code Playgroud)

除去包装',您会得到一个哈希散列:

foo = {"a" => 1, "b" => {"c" => 3}}
foo.class  # => Hash
Run Code Online (Sandbox Code Playgroud)


Jua*_*dor -2

Ruby 有一个可用于处理 JSON 文件的库。在 StackOverflow 中进行简单搜索后,我得到了这个老问题。

如何以正确的格式写入 JSON 文件

祝你好运!