Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
CSS-like selectors for JSON (Ruby implementation).
Ruby
Branch: master
Failed to load latest commit information.
lib Added GPG signature
spec
.gitignore First import
.gitmodules Using cannonical conformance tests now
.travis.yml R1.9.1 is so fracking buggy.
Gemfile
LICENSE First import
README.md Damn TextMate; Don't edit a file while pulling changes
Rakefile Added GPG signature
json_select.gemspec First import

README.md

JSONSelect Build Status

CSS-like selectors for JSON.

More info about the JSON:select format

Installation

From your terminal:

gem install json_select

In your Gemfile:

gem 'json_select'

Usage

require 'json_select'

json = { # This would normally be loaded with something like yajl-ruby
  "name" => {
    "first" => "Lloyd",
    "last" => "Hilaiel"
  },
  "favoriteColor" => "yellow",
  "languagesSpoken" => [
    {
      "language" => "Bulgarian",
      "level" => "advanced"
    },
    {
      "language" => "English",
      "level" => "native"
    },
    {
      "language" => "Spanish",
      "level" => "beginner"
    }
  ],
  "seatingPreference" => [ "window", "aisle" ],
  "drinkPreference" => [ "beer", "whiskey", "wine" ],
  "weight" => 172
}

JSONSelect('string:first-child').test(json)    # => true
JSONSelect('string:first-child').match(json)   # => "window"
JSONSelect('string:first-child').matches(json) # => ["window", "beer"]

Language support

✓ — Level 1*
Any node

✓ — Level 1T
A node of type T, where T is one string, number, object, array, boolean, or null

✓ — Level 1T.key
A node of type T which is the child of an object and is the value its parents key property

✓ — Level 1T."complex key"
Same as previous, but with property name specified as a JSON string

✓ — Level 1T:root
A node of type T which is the root of the JSON document

✓ — Level 1T:nth-child(n)
A node of type T which is the nth child of an array parent

✓ — Level 2T:nth-last-child(n)
A node of type T which is the nth child of an array parent counting from the end

✓ — Level 1T:first-child
A node of type T which is the first child of an array parent (equivalent to T:nth-child(1))

✓ — Level 2T:last-child
A node of type T which is the last child of an array parent (equivalent to T:nth-last-child(1))

✓ — Level 2T:only-child
A node of type T which is the only child of an array parent

✓ — Level 2T:empty
A node of type T which is an array or object with no child

✓ — Level 1T U
A node of type U with an ancestor of type T

✓ — Level 1T > U
A node of type U with a parent of type T

✗ — Level 2T ~ U
A node of type U with a sibling of type T

✓ — Level 1S1, S2
Any node which matches either selector S1 or S2

✗ — Level 3T:has(S)
A node of type T which has a child node satisfying the selector S

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with Rakefile or version. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 Simon Menke. See LICENSE for details.

Something went wrong with that request. Please try again.