Skip to main content

Invalid json result

In rails some times we are getting invalid json outputs say for example, as per the json standard, both the attributes and its values should be enclosed with double quotes (") but in some of the ruby patches has issues with that. If you are facing such issues then this post will be useful:


Changes what we have to make in the file 'core.rb' which is located at:
LIB_PATH/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/json/encoders
in your rails server, the LIB PATH is /usr/local/lib
required function is "encoder"  line# 52
New Code
========
define_encoder Hash do |hash|
        returning result = '{' do
          result << hash.map do |key, value|
            key = ActiveSupport::JSON::Variable.new(key.to_s) if
              ActiveSupport::JSON.can_unquote_identifier?(key)
            "\"#{key.to_json}\": #{value.to_json}"                                            #=> This is line where we included the required quotes, thats it
          end * ', '
          result << '}'
        end
      end
Old Code
========
define_encoder Hash do |hash|
        returning result = '{' do
          result << hash.map do |key, value|
            key = ActiveSupport::JSON::Variable.new(key.to_s) if
              ActiveSupport::JSON.can_unquote_identifier?(key)
            "#{key.to_json}: #{value.to_json}"
          end * ', '
          result << '}'
        end
      end
Output Sample: [Json attribute key should be enclosed with quotes]
Old code will produce the json output as follows:
[
    {
        person: {
            id: 1,
            last_name: "test"
        }
    }
]
New code will produce the json output as follows [Note the json attribute keys are enclosed with quotes]
[
    {
        "person": {
            "id": 1,
            "last_name": "test"
        }
    }
]
You can validate the json code at http://jsonlint.com/ , also the site http://jsonviewer.stack.hu/ will helps you understand the hierarchy of the json output.

Comments

Popular posts from this blog

Errno::ENOENT: No such file or directory

HTML to PDF conversion is very easy in rails and pdfkit will be useful in this case, wkhtmltopdf tool will be supporting tool so you can easily convert an html to pdf.  In my experience I used the following steps: gem install pdfkit -v 0.5.0 gem install wkhtmltopdf -v 0.1.2 gem install wkhtmltopdf-binary Some times this sequence will not work, so I use the following as per the instruction from  https://github.com/pdfkit/pdfkit/wiki/Installing-WKHTMLTOPDF Be careful to download the appropriate wkhtmltopdf tar ball, it depends on your os architecture, like i386 or 64 wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2 tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2 mv wkhtmltopdf-amd64 /usr/local/bin/wkhtmltopdf chmod +x /usr/local/bin/wkhtmltopdf Try to convert html to pdf after restarting your web servers.  If you get any error like: Errno::ENOENT: No such file or directory then I have a straightforward method and

Rails 1.2.1 with Ruby 1.8.x installation tips

ROR Setup (Ruby 1.8.6 , patch level 111, rails 1.2.1, CentOs 6.2 62 bit, Postgres 8.3) Make sure rpmforge included in your yum.repo ‘s, you can make it is available through cd /tmp/ wget  http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm rpm --import  http://apt.sw.be/RPM-GPG-KEY.dag.txt rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm Download and install ruby 1.8.6 cd /tm/ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p111.tar.bz2 tar jxf ruby-1.8.6-p111.tar.bz2  cd ruby-1.8.6-p111 ./configure make Note: If you found any error like make gcc -g -O2  -DRUBY_EXPORT -D_GNU_SOURCE=1  -I. -I.  -c array.c gcc -g -O2  -DRUBY_EXPORT -D_GNU_SOURCE=1  -I. -I.  -c bignum.c gcc -g -O2  -DRUBY_EXPORT -D_GNU_SOURCE=1  -I. -I.  -c class.c gcc -g -O2  -DRUBY_EXPORT -D_GNU_SOURCE=1  -I. -I.  -c compar.c gcc -g -O2  -DRUBY_EXPORT -D_GNU_SOURCE=1  -I. -I.  -c dir.c