to_json of hash containing an array

53 views
Skip to first unread message

Mads Kristiansen

unread,
Aug 24, 2008, 8:41:14 AM8/24/08
to Ruby on Rails: Talk
Hi there,

I am fairly new to the Rails framework, so forgive me if there is an
obvious solution to this problem.

I am using Rails 2.1.0 and trying to jsonify a hash containing an
array. E.g.

result = { :name => "McLovin", :attachments => ['file.pdf',
'file.jpg'] }
=> {:attachments=>["file.pdf", "file.jpg"], :name=>"McLovin"}
result.to_json

I would expect something like:

{
"name": "McLovin",
"attachments": [
"file.pdf",
"file.jpg"
]
}

But instead I get:

TypeError: wrong argument type Hash (expected Data)
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoding.rb:21:in `to_json'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoding.rb:21:in `send'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoding.rb:21:in `encode'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoding.rb:31:in `raise_on_circular_reference'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoding.rb:20:in `encode'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoders/hash.rb:42:in `to_json'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoders/hash.rb:41:in `map'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoders/hash.rb:41:in `to_json'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/core_ext/object/misc.rb:28:in `returning'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/
active_support/json/encoders/hash.rb:40:in `to_json'
from (irb):54


If I do "result.to_json( :except => :attachments )", then it works.

Best regards, Mads Kristiansen

Mads Kristiansen

unread,
Aug 24, 2008, 6:35:53 AM8/24/08
to Ruby on Rails: Talk

Frederick Cheung

unread,
Aug 24, 2008, 1:32:53 PM8/24/08
to rubyonra...@googlegroups.com

On 24 Aug 2008, at 13:41, Mads Kristiansen wrote:

>
> Hi there,
>
> I am fairly new to the Rails framework, so forgive me if there is an
> obvious solution to this problem.
>
> I am using Rails 2.1.0 and trying to jsonify a hash containing an
> array. E.g.
>
> result = { :name => "McLovin", :attachments => ['file.pdf',
> 'file.jpg'] }
> => {:attachments=>["file.pdf", "file.jpg"], :name=>"McLovin"}
> result.to_json
>
> I would expect something like:
>
> {
> "name": "McLovin",
> "attachments": [
> "file.pdf",
> "file.jpg"
> ]
> }

Which is exactly what I got when I tried this out. Do you have any
plugins/use any gems that could be clashing with activesupport's JSON
stuff?

Fred

> --~--~---------~--~----~------------~-------~--~----~
> You received this message because you are subscribed to the Google
> Groups "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonra...@googlegroups.com
> To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com
> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en
> -~----------~----~----~----~------~----~------~--~---
>

Mads Kristiansen

unread,
Aug 24, 2008, 2:04:50 PM8/24/08
to rubyonra...@googlegroups.com

Okay, thanks. Just wanted to confirm that it actually worked
somewhere.. :)

I removed the "json_pure" gem and now it works for me too.. Not sure
if that will cause other problems, but we'll see about that.

Best regards, Mads Kristiansen

Vlajbert

unread,
Oct 15, 2008, 11:14:39 AM10/15/08
to Ruby on Rails: Talk
This is also a problem in Merb. I believe AR's json and Merb's json
don't play well together. I put this in init.rb and now life is grand.

Merb.disable :json


On Aug 24, 1:04 pm, Mads Kristiansen <mads.kristian...@nullwire.com>
wrote:
Reply all
Reply to author
Forward
0 new messages