0.04
No commit activity in last 3 years
No release in over 3 years
JSONSelect implementation for Ruby
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

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.