Home

Awesome

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*<br> Any node

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

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

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

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

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

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

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

✓ — Level 2T:last-child<br> 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<br> A node of type T which is the only child of an array parent

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

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

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

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

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

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

Note on Patches/Pull Requests

Copyright

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