Skip to main content

ctrl-f for JSON. A simple JSON parsing library. Extract what's needed from key:value pairs.

Project description

jsonparse: ctrl-f for json

PyPI - Python Version GitHub tag (latest SemVer) jsonparse codecov Static Badge


jsonparse is a simple JSON parsing library. Extract what's needed from key:value pairs.

What's New

  • Python 2.7 compat. :sweat_smile: :relieved:
  • A new function, find_value, has been added. This function will return all keys of the matched value. :grinning:
  • CLI tool. Parse json text files or stdin via the command line :tada:

Python Library

Install

pip install jsonparse

Quickstart

Here is a quick example of what jsonparse is able to do.

from jsonparse import find_key, find_keys, find_key_chain, find_key_value, find_value

data = [{
  "key0":
    {
      "key1": "result",
      "key2":
        {
          "key1": "result1",
          "key3": {"key1": "result2"}
        }
    }
}]

find_key(data, 'key1')
['result2', 'result1', 'result']

find_key_chain(data, ['key0', 'key2', 'key3', 'key1'])
['result2']

:heavy_plus_sign: See additional documentation in the API section below.

CLI tool

Install

pip install jsonparse

Quickstart

Summary of cli commands. For complete information, jp --help

Note, jsonparse and jp are equivalent.

jp key key1 --file text.json

jp keys key1 key2 key3 --file text.json

jp key-chain my '*' chain --file text.json

jp key-value key1 '"result"' --file text.json

echo '{"key1": {"key2": 5}}' | jp key key2

jp value null --file text.json

jp value 42 --file text.json

jp value '"strValue"' --file text.json

API

The API examples using the following test data.

data = [
    {"key": 1},
    {"key": 2},
    {"my": 
        {"key": 
            {
                "chain": "A",
                "rope": 5,
                "string": 1.2,
                "cable": False
            }
        }
    },
    {"your":
    	{"key":
            {
                "chain": "B",
                "rope": 7,
                "string": 0.7,
                "cable": True
            }
    	}
    }
]

Functions

from jsonparse import find_key, find_keys, find_key_chain, find_key_value, find_value

find_key

find_key(data: dict | list | OrderedDict, key: str) -> list

    Will return all values of the matched key.

find_key(data, 'chain')
['A', 'B']

find_key(data, 'key')
[1, 2, {'chain': 'A', 'rope': 5, 'string': 1.2, 'cable': False}, {'chain': 'B', 'rope': 7, 'string': 0.7, 'cable': True}]

find_keys

find_keys(data: dict | list | OrderedDict, keys: list, group: bool = True) -> list

    The default return value is a two dimensional list. [ [], [], ...].

    To return all values as a one dimensional list, set group=False.

    The ordering of the keys does not matter.

find_keys(data, ['rope', 'cable'])
[[5, False], [7, True]]

find_keys(data, ['rope', 'cable'], group=False)
[5, False, 7, True]

find_key_chain

find_key_chain(data: dict | list | OrderedDict, keys: list) -> list

    The key chain is an ordered list of keys. The chain needs to start at the root level of the nested data.

    Wildcard * can be used as key(s) to match any.

find_key_chain(data, ['my', 'key', 'chain'])
['A']

find_key_chain(data, ['key'])
[1, 2]

find_key_chain(data, ['*', 'key', 'chain'])
['A', 'B']

find_key_chain(data, ['*', 'key', '*'])
['A', 5, 1.2, False, 'B', 7, 0.7, True]

find_key_value

find_key_value(data: dict | list | OrderedDict, key: str, value: str | int | float | bool | None) -> list

    The returned list contains the dictionaries that contain the specified key:value pair.

find_key_value(data, 'cable', False)
[{'chain': 'A', 'rope': 5, 'string': 1.2, 'cable': False}]

find_key_value(data, 'chain', 'B')
[{'chain': 'B', 'rope': 7, 'string': 0.7, 'cable': True}]

find_value

find_value(data: dict | list | OrderedDict, value: str | int | float | bool | None) -> list

    Will return all keys of the matched value.

find_value(data, 'A')
['chain']

find_value(data, False)
['cable']

Python 2.7 Usage

  • 2.7 does not guarantee ordering of dictionary's. If ordering matters, use OrderedDict for all dictionary's in the data.

Web API

Documentation

Visit the swagger API documentation

All endpoints are HTTP POST requests where you include the searchable JSON data in the request body.

Brief Endpoint Overiew

POST /v1/key/{key}
POST /v1/keys?key=1&key=2&key=3&key=4...
POST /v1/keychain?key=1&key=2&key=3&key=4...
POST /v1/keyvalue?key=a&value=1
POST /v1/value/{value}

Quickstart

Let's practice using the public, free-to-use-no-authentication, web API hosted in GCP Cloud Run.

We are POST'ing the JSON data with curl, requesting to search for the key, 'key1'. The found key values are returned as JSON.

curl -X POST "https://jsonparse.dev/v1/key/key1" \
-H 'Content-Type: application/json' \
-d '[{"key0":{"key1":"result","key2":{"key1":"result1","key3":{"key1":"result2"}}}}]'

["result2","result1","result"]

OR (using python and requests library)

import requests

data = [{
    "key0":
    {
        "key1": "result",
        "key2":
        {
            "key1": "result1",
            "key3": {"key1": "result2"}
        }
    }
}]

requests.post('https://jsonparse.dev/v1/key/key1', json=data).json()

['result2', 'result1', 'result']

Self-Hosted

pip install "jsonparse[webapi]"

gunicorn -b 0.0.0.0:8000 jsonparse.webapi:app

Alternatively, run the docker container

docker run -d ctomkow/jsonparse

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jsonparse-0.15.1.tar.gz (969.1 kB view details)

Uploaded Source

Built Distribution

jsonparse-0.15.1-py2.py3-none-any.whl (974.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file jsonparse-0.15.1.tar.gz.

File metadata

  • Download URL: jsonparse-0.15.1.tar.gz
  • Upload date:
  • Size: 969.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for jsonparse-0.15.1.tar.gz
Algorithm Hash digest
SHA256 dbd944ac62e18c6c842a46ae026c33923ede8fcc34e27b0911541da68bb9dcaf
MD5 6f0547b21fc57aaba263f94e2f6f3238
BLAKE2b-256 f6860cada90bd55822177ae0a2243e265f228528a695caacb0ef50d338c06bbf

See more details on using hashes here.

File details

Details for the file jsonparse-0.15.1-py2.py3-none-any.whl.

File metadata

  • Download URL: jsonparse-0.15.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 974.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for jsonparse-0.15.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6dc6cab87ac2ef024fc96138310976e797c130103e8a0d174a7d5350d84c5096
MD5 365f02d8a4f0797a4303e57a3a3f7f0d
BLAKE2b-256 e0d4e0e896b4d469e66bef78df6af3d15679d52ba448948bc07f9006faabf132

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page