Coder Social home page Coder Social logo

lxh023 / jsonpath Goto Github PK

View Code? Open in Web Editor NEW

This project forked from atifaziz/jsonpath

0.0 2.0 0.0 43 KB

JSONPath (XPath-like syntax for JSON) C# implementation

Home Page: http://goessner.net/articles/JsonPath/

License: MIT License

Batchfile 2.82% Shell 2.96% C# 94.22%

jsonpath's Introduction

JSONPath

Build Status Build Status NuGet MyGet

This project is a C# implementation of JSONPath.

JSONPath Expressions

Portions © 2006 Stefan Gössner

JSONPath expressions always refer to a JSON structure in the same way as XPath expression are used in combination with an XML document. Since a JSON structure is usually anonymous and doesn't necessarily have a root member object JSONPath assumes the abstract name $ assigned to the outer level object.

JSONPath expressions can use the dot-notation:

$.store.book[0].title

or the bracket-notation:

$['store']['book'][0]['title']

for input paths. Internal or output paths will always be converted to the more general bracket-notation.

JSONPath allows the wildcard symbol * for member names and array indices. It borrows the descendant operator .. from E4X and the array slice syntax proposal [start:end:step] from ECMASCRIPT 4.

Expressions of the underlying scripting language (<expr>) can be used as an alternative to explicit names or indices, as in:

$.store.book[(@.length-1)].title

using the symbol @ for the current object. Filter expressions are supported via the syntax ?(<boolean expr>), as in:

$.store.book[?(@.price < 10)].title

Below is a complete overview and a side-by-side comparison of the JSONPath syntax elements with its XPath counterparts:

XPath JSONPath Description
/ $ The root object/element
. @ The current object/element
/ . or [] Child operator
.. n/a Parent operator
// .. Recursive descent. JSONPath borrows this syntax from E4X.
* * Wildcard. All objects/elements regardless their names.
@ n/a Attribute access. JSON structures don't have attributes.
[] [] Subscript operator. XPath uses it to iterate over element collections and for predicates. In Javascript and JSON it is the native array operator.
| [,] Union operator in XPath results in a combination of node sets. JSONPath allows alternate names or array indices as a set.
n/a [start:end:step] Array slice operator borrowed from ES4.
[] ?() Applies a filter (script) expression.
n/a () Script expression, using the underlying script engine.
() n/a Grouping in XPath

Examples

Portions © 2006 Stefan Gössner

Let's practice JSONPath expressions by some more examples. We start with a simple JSON structure built after an XML example representing a bookstore:

{ "store": {
    "book": [
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}
XPath JSONPath Result Notes
/store/book/author $.store.book[*].author The authors of all books in the store
//author $..author All authors
/store/* $.store.* All things in store, which are some books and a red bicycle
/store//price $.store..price The price of everything in the store
//book[3] $..book[2] The third book
//book[last()] $..book[(@.length-1)]<br>$..book[-1:] The last book in order
//book[position()<3] $..book[0,1]
$..book[:2]
The first two books
`//book/*[self::category self::author]or//book/(category,author)` in XPath 2.0 $..book[category,author] The categories and authors of all books
//book[isbn] $..book[?(@.isbn)] Filter all books with isbn number
//book[price<10] $..book[?(@.price<10)] Filter all books cheapier than 10
//*[price>19]/.. $..[?(@.price>19)] Categories with things more expensive than 19 Parent (caret) not present in original spec
//* $..* All elements in XML document; all members of JSON structure
/store/book/[position()!=1] $.store.book[?(@path !== "$[\'store\'][\'book\'][0]")] All books besides that at the path pointing to the first @path not present in original spec

jsonpath's People

Contributors

atifaziz avatar nigelthorne avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.