json_path 0.9.0
json_path: ^0.9.0 copied to clipboard
Metadata
Implementation of RFC 9535 - JSONPath: Query Expressions for JSON. Reads and writes values in parsed JSON objects using queries like `$.store.book[2].price`.
RFC 9535 -JSONPath: Query Expressions for JSON in Dart#
JSONPath defines a string syntax for selecting and extracting JSON (RFC 8259) values from within a given JSON value.
This library is a Dart implementation of the RFC 9535JsonPath specification. It is also expected to pass the latest versionof theCompliance Test Suite. If you find a missing or incorrectly implemented feature, please open an issue.
For installation instructions and a detailed API documentation, see thepub.dev page.
Usage example:#
import 'dart:convert';import 'package:json_path/json_path.dart';void main() { final json = jsonDecode('''{ "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 } }} '''); final prices = JsonPath(r'$..price'); print('All prices in the store:'); /// The following code will print: /// /// $['store']['book'][0]['price']:8.95 /// $['store']['book'][1]['price']:12.99 /// $['store']['book'][2]['price']:8.99 /// $['store']['book'][3]['price']:22.99 /// $['store']['bicycle']['price']:19.95 prices .read(json) .map((match) => '${match.path}:\t${match.value}') .forEach(print);}Data manipulation#
EachJsonPathMatch produced by the.read() method contains the.pointer property which is a validJSON Pointerand can be used to alter the referenced value. If you only need to manipulate JSON data,check out myJSON Pointer implementation.
User-defined functions#
The JSONPath parser may be extended with user-defined functions. The user-defined functionstake precedence over the built-in ones specified by the standard. Currently, onlyfunctions of 1 and 2 arguments are supported.
To create your own function:
- Import
package:json_path/fun_sdk.dart. - Create a class implementing either
Fun1(1 argument) orFun2(2 arguments).
To use it:
- Create a new JsonPathParser with your function:
final parser = JsonPathParser(functions: [MyFunction()]); - Parse the expression:
final jsonPath = parser.parse(r'$[?my_function(@)]');
For more details see the included example.
This package comes with a few non-standard functions which you might find useful.
count(<NodeList>)- returns the number of nodes selected by the argumentindex(<SingularNodeList>)- returns the index under which the array element is referenced by the parent arraykey(<SingularNodeList>)- returns the key under which the object element is referenced by the parent objectis_array(<Maybe>)- returns true if the value is an arrayis_boolean(<Maybe>)- returns true if the value is a booleanis_number(<Maybe>)- returns true if the value is a numberis_object(<Maybe>)- returns true if the value is an objectis_string(<Maybe>)- returns true if the value is a stringreverse(<Maybe>)- returns the reversed stringsiblings(<NodeList>)- returns the siblings for the nodesxor(<bool>, <bool>)- returns the XOR of two booleans arguments
To use them, importpackage:json_path/fun_extra.dart and pass the functions to theJsonPath() constructor:
final jsonPath = JsonPathParser(functions: [ const Key(), const Reverse(),]).parse(r'$[?key(@) == reverse(key(@))]');References#
Publisher
Weekly Downloads
Metadata
Implementation of RFC 9535 - JSONPath: Query Expressions for JSON. Reads and writes values in parsed JSON objects using queries like `$.store.book[2].price`.
Repository (GitHub)
View/report issues
Contributing
Documentation
License
MIT (license)
Dependencies
iregexp,maybe_just_nothing,petitparser,rfc_6901
More
← Metadata
Publisher
Weekly Downloads
Metadata
Implementation of RFC 9535 - JSONPath: Query Expressions for JSON. Reads and writes values in parsed JSON objects using queries like `$.store.book[2].price`.
Repository (GitHub)
View/report issues
Contributing
Documentation
License
MIT (license)
Dependencies
iregexp,maybe_just_nothing,petitparser,rfc_6901