ruby-on-rails - 如何在 Ruby 中手动创建 JSON 结构?

标签 ruby-on-rails ruby json hash

我花了最后几个小时尝试手动(没有 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/

相关文章:

php - JSON、PHP、FLOT 和 jQUERY

mysql - JSON_CONTAINS 用于数组中对象的多个属性?

ruby-on-rails - 无法将 Rails 应用程序部署到 heroku

python - Ruby 系统调用不观察 python 脚本的路径

ruby - OpenSSL - 既不是 PUB key 也不是 PRIV key ::嵌套 asn1 错误

ruby-on-rails - 如何解决 "ruby installation is missing psych"错误?

javascript - jQuery/JavaScript 循环遍历 json 数据结果

ruby-on-rails - rails ,Chartkick : Show values on the charts

ruby-on-rails - rails < 4.0 "try"方法抛出 NoMethodError?

ruby-on-rails - 外部连接 rails 3 种方式