Jump to content

JSONPath

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Aljopainter (talk | contribs) at 13:53, 24 March 2024 (Adding reference to XDM as it is used as part of the XPath3.1 definition). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

JSONPath is a query language for JavaScript Object Notation (JSON).

A JSONPath expression selects and extracts JSON values from a given JSON value. The uses of JSONPath include:

  • Selecting a specific node in a JSON value
  • Retrieving a set of nodes from a JSON value, based on specific criteria
  • Navigating through complex JSON values to retrieve the required data.

JSONPath queries are written as strings, e.g. $.foo.

Example

The JSONPath expression $.store.book[0] applied to the following value selects the first book (by Nigel Rees).

{
  "store": {
    "book": [
      { "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 399
    }
  }
}

The expression $.store.book[*].price extracts the prices of books: 8.95 and 22.99 (since [*] selects all the nodes of an array).

The expression $..price extracts all the prices: 8.95, 22.99, and 399.

History

JSONPath was first described in an online article[1] by Stefan Gössner in February 2007. Gössner also published initial implementations in JavaScript and PHP.

Subsequently, over fifty implementations were created in various programming languages. The JSONPath Comparison Project[2] lists many of these implementations and compares their behavior. JSONPath is widely used in the Java world[3].

In 2024, the IETF published a standard for JSONPath as RFC 9535[4].

Research

  • Scalable Processing of Contemporary Semi-Structured Data on Commodity Parallel Processors - A Compilation-based Approach[5] describes an optimisation which converts JSONPath queries into parallel programs with bounded memory requirements.
  • Supporting Descendants in SIMD-Accelerated JSONPath[6] describes an optimisation of JSONPath descendant queries when streaming potentially very large JSON values.
  • τJSONPath: A Temporal Extension of the JSONPath Language for the τJSchema Framework[7] describes a temporal extension of JSONPath that supports querying the versions of a JSON value over its version history.

Alternatives

  • JMESPath[8] is a query language for JSON with features that go far beyond JSONPath. It has a specification, a compliance test suite, and multiple implementations in various languages.
  • JSON Pointer[9] defines a string syntax for identifying a single value within a given JSON value of known structure.
  • JSONiq[10] is a query and transformation language for JSON.
  • XPath3.1[11] is an expression language that allows the processing of values conforming to the XDM[12] data model. The version 3.1 of XPath supports JSON as well as XML.

References

  1. ^ Gössner, Stefan. "JSONPath - XPath for JSON". Archived from the original on 11 September 2007. Retrieved 22 March 2024.
  2. ^ Burgmer, Christoph. "JSONPath Comparison". Archived from the original on 3 March 2024. Retrieved 22 March 2024.
  3. ^ Friesen, Jeff (11 January 2019). "Extracting JSON values with JsonPath". Java XML and JSON: Document Processing for Java SE (2nd ed.). Apress. ISBN 978-1484243299.
  4. ^ Gössner, Stefan (February 2024). "RFC 9535 JSONPath: Query Expressions for JSON". The RFC Series. The Internet Engineering Task Force (IETF). Retrieved 22 March 2024.
  5. ^ Jiang, Lin; Sun, Xiaofan; Farooq, Umar; Zhao, Zhijia (April 2019). "Scalable Processing of Contemporary Semi-Structured Data on Commodity Parallel Processors - A Compilation-based Approach". Architectural Support for Programming Languages and Operating Systems: 79–92. doi:10.1145/3297858.3304008. ISBN 978-1-4503-6240-5.
  6. ^ Gienieczko, Mateusz; Murlak, Filip; Paperman, Charles (February 2024). "Supporting Descendants in SIMD-Accelerated JSONPath". Conference on Architectural Support for Programming Languages and Operating Systems. 4.
  7. ^ Brahmia, Zouhaier; Grandi, Fabio; Brahmia, Safa; Bouaziz, Rafik (2023). "τJSONPath: A Temporal Extension of the JSONPath Language for the τJSchema Framework". Lecture Notes in Networks and Systems. 635: 844–853. doi:10.1007/978-3-031-26254-8_123. ISBN 978-3-031-26253-1.
  8. ^ Saryerwinnie, James. "JMESPath". Archived from the original on 14 March 2024. Retrieved 23 March 2024.
  9. ^ Bryan, Paul; Zyp, Kris; Nottingham, Mark (April 2013). "RFC 6901 JavaScript Object Notation (JSON) Pointer". The RFC Series. The Internet Engineering Task Force (IETF). Retrieved 23 March 2024.
  10. ^ "JSONiq". Archived from the original on 13 January 2024. Retrieved 23 March 2024.
  11. ^ Robie, Jonathan; Dyck, Michael; Spiegel, Josh. "XML Path Language (XPath) 3.1". w3c.org. Archived from the original on 18 January 2024. Retrieved 24 March 2024.
  12. ^ Tovey-Walsh, Norman; Snelson, John; Coleman, Andrew. "XQuery and XPath Data Model". w3c.org. Archived from the original on 18 January 2024. Retrieved 24 March 2024.