Skip to content

linw1995/jsonpath

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c2cbdac · Dec 24, 2024
Dec 24, 2024
Oct 10, 2024
Oct 10, 2024
Dec 24, 2024
Jan 28, 2022
Oct 10, 2024
Dec 24, 2024
Oct 12, 2024
May 19, 2020
Dec 29, 2019
Dec 24, 2024
Oct 10, 2024
Feb 7, 2020
Oct 11, 2024
Oct 12, 2024
Apr 14, 2020
Dec 24, 2024
Dec 24, 2024
Sep 3, 2021
Dec 24, 2024
Dec 24, 2024
Dec 24, 2024
May 31, 2023

Repository files navigation

JSONPATH

license Pypi Status Python version Package version PyPI - Downloads GitHub last commit Code style: black Build Status codecov PDM managed

A selector expression for extracting data from JSON.

Quickstarts

Installation

Install the stable version from PYPI.

pip install jsonpath-extractor

Or install the latest version from Github.

pip install git+https://github.com/linw1995/jsonpath.git@master

Usage

{
    "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"}]

Usage via CLI

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"
  }
]

Changelog

v0.9.1

Build

  • Remove support for Python 3.8

Contributing

Environment Setup

Clone the source codes from Github.

git clone https://github.com/linw1995/jsonpath.git
cd jsonpath

Setup 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 version

Linting

Use pre-commit for installing linters to ensure a good code style.

make pre-commit

Run linters. Some linters run via CLI nox, so make sure you install it.

make check-all

Testing

Run quick tests.

make

Run quick tests with verbose.

make vtest

Run tests with coverage. Testing in multiple Python environments is powered by CLI nox.

make cov

Documentation

Run serving documents with live-reloading.

make serve-docs