Ruby JSON.pretty_generate ......非常不合适

Amy*_*Amy 19 ruby json rubygems ruby-on-rails

我似乎无法JSON.pretty_generate()在Rails中实际生成漂亮的输出.

我正在使用Rails 2.3.5,它似乎自动加载JSON gem.真棒.虽然使用script/console它确实产生JSON:

some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}}
some_data.to_json
=> "{\"cow\":[1,2,3,4],\"moo\":{\"cat\":\"meow\",\"dog\":\"woof\"},\"foo\":1,\"bar\":20}"
Run Code Online (Sandbox Code Playgroud)

但这不会产生漂亮的输出:

JSON.pretty_generate(some_data)
=> "{\"cow\":[1,2,3,4],\"moo\":{\"cat\":\"meow\",\"dog\":\"woof\"},\"foo\":1,\"bar\":20}"
Run Code Online (Sandbox Code Playgroud)

我发现生成它的唯一方法是使用irb和加载"Pure"版本:

require 'rubygems'
require 'json/pure'
some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}}
JSON.pretty_generate(some_data)
=> "{\n  \"cow\": [\n    1,\n    2,\n    3,\n    4\n  ],\n  \"moo\": {\n    \"cat\": \"meow\",\n    \"dog\": \"woof\"\n  },\n  \"foo\": 1,\n  \"bar\": 20\n}"
Run Code Online (Sandbox Code Playgroud)

但是,我真正想要的是Rails产生这个.有没有人有任何提示,为什么我不能让Rails中的生成器正常工作?

谢谢!

小智 20

要生成漂亮的JSON输出,您似乎只是错过了一个puts电话.

数据:

some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}}
Run Code Online (Sandbox Code Playgroud)

仅限通话JSON.pretty_generate:

> JSON.pretty_generate some_data
 => "{\n  \"foo\": 1,\n  \"bar\": 20,\n  \"cow\": [\n    1,\n    2,\n    3,\n    4\n  ],\n  \"moo\": {\n    \"dog\": \"woof\",\n    \"cat\": \"meow\"\n  }\n}"
Run Code Online (Sandbox Code Playgroud)

添加puts到混合中:

> puts JSON.pretty_generate some_data
{
  "foo": 1,
  "bar": 20,
  "cow": [
    1,
    2,
    3,
    4
  ],
  "moo": {
    "dog": "woof",
    "cat": "meow"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • OP提供的输出不包含任何`\n',因此`puts`不会改变任何东西. (3认同)
  • `pretty_generate`不适用于OP.正如您所看到的,OP的输出中没有"\n"或缩进空格.所以`puts`不会改变任何东西. (3认同)

Sam*_*uel 5

我使用Rails 2.3.8并安装了JSON gem(gem install json).JSON.pretty_generate现在在脚本/控制台中做得很好:

>> some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}}
=> {"cow"=>[1, 2, 3, 4], "moo"=>{"cat"=>"meow", "dog"=>"woof"}, "foo"=>1, "bar"=>20}
>> JSON.pretty_generate(some_data)
=> "{\n  \"cow\": [\n    1,\n    2,\n    3,\n    4\n  ],\n  \"moo\": {\n    \"cat\": \"meow\",\n    \"dog\": \"woof\"\n  },\n  \"foo\": 1,\n  \"bar\": 20\n}"
Run Code Online (Sandbox Code Playgroud)