Jsonit

Jsonit provides a way to quickly construct handcrafted json documents.
Jsonit requires objects to respond to #to_json.
It will attempt to load the json gem if this is not the case.

Installation

gem install jsonit

Usage

require 'json'    # Jsonit expects a #to_json method on object.
require 'jsonit'

# a simple object
Jsonit::Builder.new do |json|
  json.foo "bar"
end.to_json #=> {"foo":"bar"}

# nested object
Jsonit::Builder.new do |json|
  json.foo do
    json.bar "baz"
  end

  json.alpha do
    json.bravo do
      json.charlie "delta"
    end
  end
end.to_json #=> {"foo":{"bar":"baz"},"alpha":{"bravo":{"charlie":"delta"}}}

# arrays
Jsonit::Builder.new do |json|
  json.first [1, 2, 3]

  json.second [1, 2, 3] do |itm|
    json.value itm
  end
end.to_json #=> {"first":[1, 2, 3],"second":[{"value":1},{"value":2},{"value":3}]}

Rails 3

Jsonit can be used with rails 3.

In app/helpers/photos_helper.rb

class PhotosHelper
  def photos
    Photo.all
  end
end

In app/controllers/photos_controller.rb

class PhotosController < ApplicationController
  respond_to :json
end

In app/views/photos/index.json.jsonit

json.ok true
json.data photos do |photo|
  photo.title    photo.title
  photo.location url_for(photo)
end

Result will be something like:

{
  "ok": true,
  "data": [
        {
          "title": "My First Photo",
          "location": "http://www.example.com/photos/1.json"
        }
  ]
}

Sinatra

Jsonit can be used with Sinatra.

In your Gemfile:

gem 'json'
gem 'jsonit'

In views/index.jsonit:

json.foo "bar"

In your app:

class App < Sinatra::Base
  get "/" do
    jsonit :index
  end
end

Padrino

Jsonit can be used with Padrino.

In your Gemfile:

gem 'json'
gem 'jsonit'

In app/views/photos/index.json.jsonit:

json.photos photos do |photo|
  json.title    photo.title
  json.location url_for(:photos, :show, :photo_id => photo.id)
end

In your controller:

MyApp.controllers :photos do
  helpers do
    def photos
      Photos.all
    end
  end

  get :index, :provides => :json do
    render :'photos/index'
  end

  get :show, :with => :photo_id, :provides => :json do
    render :'photos/show'
  end
end

Project status

Jsonit is currently under active development.

LICENSE

Json is Copyright (c) 2011 Voormedia B.V. and distributed under the MIT license. See the LICENSE file for more info.