Hacker News new | comments | ask | show | jobs | submit login

I think I'm missing something here, because I can achieve the same using normal js

  stuff = {
    "author": {
      "name": {
        "first": "Lloyd",
        "last": "Hilaiel"
      "drinkPref": [
    "thing": "JSONSelect site",
    "license": "(cc) BY-SA"

  > "whiskey"

Their site has a pretty bad example. Instead imagine it's an array of authors instead. Then their selector would give you a list of all their favourite drinks, which would require a loop in normal JS.

I think I'd prefer something more XPath-like than CSS myself (as someone linked in another comment)

I'd love to see a javascript+json version of xquery. It would rock as a templating language.

Naming it might be tricky though.

there is a minimal spec, and implementations, of JSONPath, which may be enough for you

Couldn't this be done with a simple map function? Not sure the exact javascript but in ruby it would be as simple as:

  favourite_drinks = authors.map { |a| a[:favourite_drink] }
Internally I'd imagine the language will have to loop through the json anyway. Are there any other benefits I'm missing (apart from of course the nice css-like syntax, which is perfectly valid).

It could be, yes. `map` isn't built-in on all browsers, though, which I think has hurt its use. i.e., most people don't think about it, so it doesn't get used as often.

Underscore.js and Prototype.js both define this function. You can include this and use map. Underscore delegates it to ECMAScript 5's native map if available.

It's definitely 'out there', and you can always just copy-paste to get the same code and delegation[1], but the lack of default availability is a pretty damaging blow. It shouldn't be, but the Javascript world isn't exactly a pantheon of high-quality code.

[1]: https://developer.mozilla.org/en/JavaScript/Reference/Global...

But selecting a list of similar items in plain JavaScript would be troublesome.

But what happens in the case where there is no author element?

With normal javascript you would get an exception .. hopefully with this you just get back undefined without having to check every step in the path.

with the reference implementation:

JSONSelect.match(".nonexistantkey .somechild", obj) returns []

Alternately, if you use the JSONSelect.forEach() method your callback will just not be invoked.

So no existence testing before access for recursive values. A main benefit of this thing in javascript.

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact