A selector expression for extracting data from JSON.
Install the stable version from PYPI.
pip install jsonpath-extractorOr install the latest version from Github.
pip install git+https://github.com/linw1995/jsonpath.git@master{
"goods": [
{"price": 100, "category": "Comic book"},
{"price": 200, "category": "magazine"},
{"price": 200, "no category": ""}
],
"targetCategory": "book"
}How to parse and extract all the comic book data from the above JSON file.
import json
from jsonpath import parse
with open("example.json", "r") as f:
data = json.load(f)
assert parse("$.goods[contains(@.category, $.targetCategory)]").find(data) == [
{"price": 100, "category": "Comic book"}
]Or use the jsonpath.core module to extract it.
from jsonpath.core import Root, Contains, Self
assert Root().Name("goods").Predicate(
Contains(Self().Name("category"), Root().Name("targetCategory"))
).find(data) == [{"price": 100, "category": "Comic book"}]The faster way to extract by using CLI.
jp -f example.json "$.goods[contains(@.category, $.targetCategory)]"Or pass content by pipeline.
cat example.json | jp "$.goods[contains(@.category, $.targetCategory)]"The output of the above commands.
[
{
"price": 100,
"category": "Comic book"
}
]- Remove support for Python 3.8
Clone the source codes from Github.
git clone https://github.com/linw1995/jsonpath.git
cd jsonpathSetup the development environment. Please make sure you install the pdm, pre-commit and nox CLIs in your environment.
make init
make PYTHON=3.8 init # for specific python versionUse pre-commit for installing linters to ensure a good code style.
make pre-commitRun linters. Some linters run via CLI nox, so make sure you install it.
make check-allRun quick tests.
makeRun quick tests with verbose.
make vtestRun tests with coverage. Testing in multiple Python environments is powered by CLI nox.
make covRun serving documents with live-reloading.
make serve-docs