0.02
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
JSONSelect implementation for Ruby
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 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 1 — T
A node of type T, where T is one string, number, object, array, boolean, or null

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

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

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

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

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

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

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

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

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

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

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

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

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

✗ — Level 3 — T: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.