我花了最后几个小时尝试手动(没有 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)
我如何在 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]}
如果您正在尝试弄清楚如何基于 Ruby 哈希或数组创建特定的 JSON 输出,可以通过逆向过程轻松完成,从所需 JSON 的示例开始,然后让解析器将其转换为基础对象:
JSON['{"a":1,"b":[2,3]}'] # => {"a"=>1, "b"=>[2, 3]}
要修改现有的 JSON 字符串,将其解析为 Ruby 对象,对其进行修改,然后再次输出:
bar = JSON['{"a":1,"b":[2,3]}']
bar['c'] = 'more data'
puts JSON[bar]
# >> {"a":1,"b":[2,3],"c":"more data"}
重要的是要注意你的例子
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"}'
不是 JSON。这是一个字符串:
foo = '{"a" => 1}'
foo.class # => String
移除包装 '
并且你有一个散列的散列:
foo = {"a" => 1, "b" => {"c" => 3}}
foo.class # => Hash
关于ruby-on-rails - 如何在 Ruby 中手动创建 JSON 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36434731/