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中创建这种结构?
如果要创建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)