JsonDocStore
Simple JSON document storage on disk.
- A Python library to organize and query JSON documents on disk, basically, with no running process.
- You instantiate a
JsonDocStoreobject with a root directory where your JSON documents will be stored. If you want to organize documents into different folders, use oneJsonDocStoreinstance per folder. Each instance manages only the JSON files in its own directory. E.g.JsonDocStore("./data/users")andJsonDocStore("./data/products"). - Each document is stored as a file named
<key>.json. The document key is the filename stem. - If you want to query by a field, create an index on it. This will create an
index.jsonfile in the store directory. Currently, only exact match is supported. It is not required for basic operations likeinsert,update,delete, andget. The index is in-memory, not persisted to disk and is rebuilt when the store is opened.
Installation
pip install jsondocstore
API docs are available at:
https://mortensi.github.io/jsondocstore/
Using from the terminal
Start the interactive shell:
jsondocstore /path/to/store
The directory must already exist. The CLI does not create it for you.
Commands:
listprints document filenames onlylistindexesprints indexed fields, or[]if there is noindex.jsonget KEYqueryby FIELD VALUEcreateindex FIELDdeleteindex FIELDinsert KEY JSON_DOCUMENTvalid keys may contain letters, digits,.,_, and-. No whitespace.update KEY JSON_DOCUMENTdelete KEYexit
Example session:
$ jsondocstore ./data
jsondocstore> insert user-1 '{"username": "alice", "password": "secret1", "role": "admin"}'
jsondocstore> insert user-2 '{"username": "bob", "password": "secret2", "role": "user"}'
jsondocstore> insert user-3 '{"username": "carol", "password": "secret3", "role": "user"}'
jsondocstore> update user-2 '{"username": "bob", "password": "secret2", "role": "admin"}'
jsondocstore> list
[
"user-1.json",
"user-2.json",
"user-3.json"
]
jsondocstore> get user-1
{
"password": "secret1",
"role": "admin",
"username": "alice"
}
jsondocstore> createindex role
jsondocstore> queryby role user
{
"user-3": {
"password": "secret3",
"role": "user",
"username": "carol"
}
}
Using from your Python application
Learn the API by reading the API reference.
Example:
from jsondocstore import JsonDocStore
store = JsonDocStore("./data", create=True)
store.insert("user-1", {"username": "alice", "password": "secret1", "role": "admin"})
store.insert("user-2", {"username": "bob", "password": "secret2", "role": "user"})
store.insert("user-3", {"username": "carol", "password": "secret3", "role": "user"})
store.update("user-2", {"username": "bob", "password": "secret2", "role": "admin"})
names = store.list_all()
store.create_index("role")
admins = store.query_by("role", "admin")
doc = store.get("user-1")
Schema
The schema file index.json is optional and required only if you want to use indexes.
index_fieldsdefines which fields are indexed in memory.get(),insert(),delete(), andlist_all()work withoutindex.json.query_by()only works when an index exists. It returns a mapping ofkey -> document. Querying without an index, or on a non-indexed field, raises an error.- Indexes work only on top-level document fields, not nested paths.
Example:
{
"index_fields": ["email", "status"]
}
For example, this works:
{
"email": "alice@example.com",
"profile": {
"city": "Rome"
}
}
- you can index
email - you cannot index
profile.city
Metadata
Release files for jsondocstore 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jsondocstore-0.2.1.tar.gz | 8.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jsondocstore-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.8 kB
Release files / jsondocstore-0.2.1.tar.gz
| Download URL | jsondocstore-0.2.1.tar.gz |
|---|---|
| Size | 8.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ae137d3d6bdeaa03ac52a2af4cc4c7032686165863d09bca39a47909fb0792b4
|
|
BLAKE2b-256 checksum How to use checksums |
725cd2b473a8a4bf3ad4a0e1f1f277331aa06013a3c1094def91600b660207cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 10, 2026.
Transparency logRelease files / jsondocstore-0.2.1-py3-none-any.whl
| Download URL | jsondocstore-0.2.1-py3-none-any.whl |
|---|---|
| Size | 8.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7b6bcaccf5a9a242ed4c8a30af5835328e3f2828f345c6df0709884e6494c1b4
|
|
BLAKE2b-256 checksum How to use checksums |
e103490046105aa6336207d02e0d23e583609b4a21ce6e50b46c029da9abcc9d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 10, 2026.
Transparency log