Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

« Newer Snippets
Older Snippets »
Showing 1-2 of 2 total  RSS 

Quick and Dirty JSON Serializer

// quick and dirty JOSN serializer

def jsonize(d)
  def surround(d, i=0); '' << '"[{'[i] << d << '"]}'[i]; end
  alias j jsonize; alias s surround
  if d.kind_of?(String) then s(d)
  elsif d.kind_of?(Symbol) then s(d.to_s)
  elsif d.kind_of?(Array) then s(d.collect {|v| j(v)}.join(', '), 1)
  elsif d.kind_of?(Hash) then s(d.to_a.collect { |v| "#{j(v[0])} : #{j(v[1])}" }.join(', '),2)
  # add support for other types of objects here if needed...
  else d.to_s; end
end

recursive Rails style serialization for javascript objects

Have you ever wanted to post from your javascript program to a Rails app so that the params are available to your application in a properly nested hash? Prototype makes this easy for form elements with it's Form Serializer, but it makes no provision for standard javascript objects.

Suffer no longer. With the following code you can serialize arbitrarily nested objects (eg, the sort of thing you get when you parse a JSON statement), so that it is ready to be posted via http to a Rails app.

The original Rails recursive Javascript object serializer.

var serializer = {
 
  serialize : function(object) {
    var values = []; 
    var prefix = '';
    
    values = this.recursive_serialize(object, values, prefix);
    
    param_string = values.join('&');
    return param_string;
  },
  
  recursive_serialize : function(object, values, prefix) {
    for (key in object) {
      if (typeof object[key] == 'object') {
        
        if (prefix.length > 0) {
          prefix += '['+key+']';         
        } else {
          prefix += key;
        }
        
        values = this.recursive_serialize(object[key], values, prefix);
        
        prefixes = prefix.split('[');
        
        if (prefixes.length > 1) {
          prefix = prefixes.slice(0,prefixes.length-1).join('[');
        } else {
          prefix = prefixes[0];
        }
        
      } else {
        value = encodeURIComponent(object[key]);
        if (prefix.length > 0) {
          prefixed_key = prefix+'['+key+']'          
        } else {
          prefixed_key = key
        }
        prefixed_key = encodeURIComponent(prefixed_key);
        if (value) values.push(prefixed_key + '=' + value);
      }
    }
    return values;
  }
}


Usage:

payload = new Object;
payload.comment = new Object;
payload.comment.title = "The Title";
payload.comment.body = "The body of the post.";
post_string = serializer.serialize(payload);


Result:

comment%5Btitle%5D=The%20Title&comment%5Bbody%5D=The%20body%20of%20the%20post.


Which gives you this in Rails:

params[:comment] #=>
{:title => "The Title", :body => "The body of the post."}
« Newer Snippets
Older Snippets »
Showing 1-2 of 2 total  RSS