Se pare că nu reușesc să obțin JSON.pretty_generate()
să genereze de fapt o ieșire frumoasă în Rails.
Folosesc Rails 2.3.5 și se pare că încarcă automat gemul JSON. Minunat. În timp ce folosesc script/console
aceasta produce într-adevăr 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}"
Dar acest lucru nu produce o ieșire frumoasă:
JSON.pretty_generate(some_data)
=> "{
cow
:[1,2,3,4],
moo
:{
cat
:
meow
,
dog
:
woof
},
foo
:1,
bar
:20}"
Singura modalitate pe care am găsit-o pentru a o genera este de a utiliza irb
și să încărcați versiunea „pură”:
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)
=> "{
"cow": [
1,
2,
3,
4
],
"moo": {
"cat": "meow",
"dog": "woof"
},
"foo": 1,
"bar": 20
}"
DAR, ceea ce vreau cu adevărat este ca Rails să producă acest lucru. Are cineva vreun pont de ce nu pot face ca generatorul din Rails să funcționeze corect?
Mulțumesc!
Pentru a genera o ieșire JSON frumoasă se pare că vă lipsește doar un puts
apel.
Datele:
some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}}
Doar apeluri JSON.pretty_generate
:
> JSON.pretty_generate some_data
=> "{
foo
: 1,
bar
: 20,
cow
: [
1,
2,
3,
4
],
moo
: {
dog
:
woof
,
cat
:
meow
}
}"
Adăugarea unui puts
în amestec:
> puts JSON.pretty_generate some_data
{
"foo": 1,
"bar": 20,
"cow": [
1,
2,
3,
4
],
"moo": {
"dog": "woof",
"cat": "meow"
}
}
- Rezultatul pe care OP l-a furnizat nu conține nici o
s, deci
puts
nu va schimba nimic. – > . - @DamianNowak Nu sunt sigur că înțeleg care este obiecția ta. În exemplul meu, folosesc aceeași intrare ca și cea specificată de OP și apoi demonstrez o ieșire destul de frumoasă prin utilizarea lui
puts
în irb. Ați putea să clarificați ce vreți să spuneți? – > . pretty_generate
nu funcționează pentru OP. Nu există
sau spații de indentare în rezultatul OP, după cum puteți vedea. Deci
puts
nu va schimba nimic. – > .- @Geoff Petrie Puteți vedea
în prima parte a codului dvs. care nu se regăsesc în rezultatul lui OP. Acesta este motivul pentru care puts nu va schimba nimic pentru OP. – > .
Folosesc Rails 2.3.8 și am instalat gemul JSON (gem install json
). JSON.pretty_generate
acum face frumos în script/console:
>> 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)
=> "{
"cow": [
1,
2,
3,
4
],
"moo": {
"cat": "meow",
"dog": "woof"
},
"foo": 1,
"bar": 20
}"
- Du-te figura. Acum funcționează. De asemenea, am făcut recent actualizarea la 2.3.8. – > .
- @Amy, nu înseamnă că acest răspuns ar trebui să fie cel acceptat? – > .
{"cow"=>[1, 2, 3, 4], ...
nu este un JSON valid. JSON folosește:
în loc de Ruby’s=>
. Poți să lipești rezultatul real? – > Por maček.