Enhanced JSON processing with includes, comments, and more
Project description
pypaya-json
Enhanced JSON processing with includes, comments, path resolution, and more.
Features
- File Inclusions: Include other JSON files using
"include"declarations - Comment Support: Add comments to JSON files using custom comment characters
- Path Resolution: Automatically resolve relative paths to absolute paths using
@path:annotations - Flexible Configuration: Use as class methods for one-time operations or instances for reusable configurations
- Nested Key Access: Navigate and extract data from nested JSON structures
- Conditional Processing: Enable/disable sections using custom enable keys
- Value Replacement: Replace entire sections with data from external files
Installation
pip install pypaya-json
Quick start
One-time usage (class method)
from pypaya_json import PypayaJSON
# Basic loading
data = PypayaJSON.load("config.json")
# With comments support and path resolution
data = PypayaJSON.load("config.json", comment_string="#")
# With custom enable key and path annotations disabled
data = PypayaJSON.load("config.json", enable_key="active", resolve_path_annotations=False)
# With custom path annotation prefix
data = PypayaJSON.load("config.json", path_annotation_prefix="$resolve:")
Reusable configuration (instance)
from pypaya_json import PypayaJSON
# Create a reusable loader
loader = PypayaJSON(enable_key="active", comment_string="//")
# Load multiple files with same settings
config = loader.load_file("config.json")
settings = loader.load_file("settings.json")
Examples
Path resolution
config.json:
{
"training": {
"@path:data_dir": "../../data/training",
"@path:checkpoint": "../models/best.ckpt"
},
"output": {
"@path:save_dir": "./outputs"
}
}
Result:
data = PypayaJSON.load("config.json")
# {
# "training": {
# "data_dir": "/absolute/path/to/data/training",
# "checkpoint": "/absolute/path/to/models/best.ckpt"
# },
# "output": {
# "save_dir": "/absolute/path/to/project/outputs"
# }
# }
Basic file inclusion
main.json:
{
"app_name": "MyApp",
"include": {
"filename": "database.json"
},
"features": ["auth", "api"]
}
database.json:
{
"host": "localhost",
"port": 5432,
"name": "myapp_db"
}
Result:
data = PypayaJSON.load("main.json")
# {
# "app_name": "MyApp",
# "host": "localhost",
# "port": 5432,
# "name": "myapp_db",
# "features": ["auth", "api"]
# }
Comments support
config.json:
{
"server": {
"host": "0.0.0.0", // Bind to all interfaces
"port": 8080 // Default port
},
// "debug": true, // Commented out
"workers": 4
}
data = PypayaJSON.load("config.json", comment_string="//")
# Comments are automatically stripped
Combined path resolution and includes
main.json:
{
"@path:base_dir": "../data",
"include": {
"filename": "models.json"
}
}
models.json:
{
"@path:checkpoint_dir": "./checkpoints",
"model_name": "best_model.ckpt"
}
Result: All paths resolved relative to their respective config file locations
Nested key access
data.json:
{
"database": {
"connections": {
"primary": "postgresql://...",
"replica": "postgresql://..."
}
}
}
main.json:
{
"include": {
"filename": "data.json",
"keys_path": "database/connections/primary"
}
}
Result: "postgresql://..."
Conditional inclusion
{
"base_config": "value",
"include": {
"filename": "optional.json",
"enabled": false
}
}
# With custom enable key
loader = PypayaJSON(enable_key="active")
data = loader.load_file("config.json")
Value replacement
{
"database": {
"replace_value": {
"filename": "secrets.json",
"key": "database_url"
}
}
}
Custom path annotation prefix
{
"$resolve:data_dir": "../../data",
"$resolve:model_path": "../models/best.ckpt"
}
data = PypayaJSON.load("config.json", path_annotation_prefix="$resolve:")
API Reference
PypayaJSON class
Class methods
PypayaJSON.load(path, enable_key="enabled", comment_string=None, resolve_path_annotations=True, path_annotation_prefix="@path:")- Load JSON file with one-time configuration
Instance methods
PypayaJSON(enable_key="enabled", comment_string=None, resolve_path_annotations=True, path_annotation_prefix="@path:")- Create reusable loader instanceloader.load_file(path)- Load JSON file using instance configuration
Parameters
path(str): Path to the JSON fileenable_key(str): Key used for conditional inclusion (default: "enabled")comment_string(str, optional): String that denotes comments (default: None)resolve_path_annotations(bool): Whether to resolve path annotations (default: True)path_annotation_prefix(str): Prefix for path annotation keys (default: "@path:")
Advanced usage
Multiple inclusions
{
"include": [
{"filename": "config1.json"},
{"filename": "config2.json", "keys": ["specific_key"]},
{"filename": "config3.json", "enabled": false}
]
}
Specific key selection
{
"include": {
"filename": "large_config.json",
"keys": ["database", "cache", "logging"]
}
}
Deep nested access
{
"include": {
"filename": "nested.json",
"keys_path": ["level1", "level2", "target_key"]
}
}
Complex configuration with all features
{
// Application settings
"app": {
"@path:base_dir": "../../app",
"name": "MyApp"
},
// Include database config
"include": {
"filename": "database.json",
"keys": ["production"]
},
// Model configuration with paths
"model": {
"@path:checkpoint_dir": "./checkpoints",
"@path:data_dir": "../data",
"config": {
"replace_value": {
"filename": "model_params.json",
"key": "transformer"
}
}
},
// Optional development settings
"dev_tools": {
"enabled": false,
"@path:debug_dir": "./debug"
}
}
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pypaya_json-0.3.0.tar.gz.
File metadata
- Download URL: pypaya_json-0.3.0.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fd1facac81d6d8c7d9441215e148a7283663f04478bf4463ccd5e75f9a3fa99
|
|
| MD5 |
5458626efbf28de556c8b4df2031ab1a
|
|
| BLAKE2b-256 |
9d013eb0359aa5a6c46204a1d70b8f11a5a61276468402d74eb38b4909366869
|
File details
Details for the file pypaya_json-0.3.0-py3-none-any.whl.
File metadata
- Download URL: pypaya_json-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
535036c69c3504af7727a4b8241ca5469a1c6aa1315aed9ac02b6d9606292403
|
|
| MD5 |
6b38d235a971fa2c4a420a66e6d89039
|
|
| BLAKE2b-256 |
3ba5eadda888c84f3c06ce1644af990eccf6382380b89a9b721994f6c6ce52db
|