cJSON-Tools
A high-performance C toolkit for transforming and analyzing JSON data with Python bindings. cJSON-Tools provides powerful tools for:
- JSON Flattening: Converts nested JSON structures into flat key-value pairs
- Path Type Analysis: Get flattened paths with their data types for schema discovery
- JSON Schema Generation: Analyzes JSON objects and generates a unified JSON schema
- JSON Filtering: Remove keys with empty string values or null values
- Regex Key Replacement: Replace JSON keys matching regex patterns
- Regex Value Replacement: Replace JSON string values matching regex patterns
- Multi-threading Support: Optimized performance for processing large JSON datasets
- Performance Optimized: SIMD instructions, memory pools, and cache-friendly algorithms
- Python Bindings: Use the library directly from Python with native C performance
🚀 Quick Start
Python (Recommended)
pip install cjson-tools
import cjson_tools
import json
# Flatten nested JSON
data = {"user": {"name": "John", "address": {"city": "NYC"}, "tags": ["dev", "python"]}}
flattened = cjson_tools.flatten_json(json.dumps(data))
print(flattened) # {"user.name": "John", "user.address.city": "NYC", "user.tags[0]": "dev", "user.tags[1]": "python"}
# Get flattened paths with data types
paths_with_types = cjson_tools.get_flattened_paths_with_types(json.dumps(data))
print(paths_with_types) # {"user.name": "string", "user.address.city": "string", "user.tags[0]": "string", "user.tags[1]": "string"}
# Generate JSON schema
schema = cjson_tools.generate_schema(json.dumps(data))
print(schema)
# Remove keys with empty string values
data_with_empty = {"name": "John", "email": "", "phone": "123-456-7890", "bio": ""}
cleaned = cjson_tools.remove_empty_strings(json.dumps(data_with_empty))
print(cleaned) # {"name": "John", "phone": "123-456-7890"}
# Remove keys with null values
data_with_nulls = {"name": "John", "email": None, "phone": "123-456-7890", "address": None}
filtered = cjson_tools.remove_nulls(json.dumps(data_with_nulls))
print(filtered) # {"name": "John", "phone": "123-456-7890"}
# Replace keys matching regex patterns
data_with_sessions = {"session.pageTimesInMs.HomePage": 1500, "session.pageTimesInMs.AboutPage": 2000, "user.name": "John"}
replaced_keys = cjson_tools.replace_keys(json.dumps(data_with_sessions), r"^session\.pageTimesInMs\..*$", "session.pageTimesInMs.PrezzePage")
print(replaced_keys) # {"session.pageTimesInMs.PrezzePage": 1500, "session.pageTimesInMs.PrezzePage": 2000, "user.name": "John"}
# Replace string values matching regex patterns
data_with_old_values = {"user": {"status": "old_active", "role": "old_admin", "name": "John"}}
replaced_values = cjson_tools.replace_values(json.dumps(data_with_old_values), r"^old_.*$", "new_value")
print(replaced_values) # {"user": {"status": "new_value", "role": "new_value", "name": "John"}}
C Library
git clone https://github.com/amaye15/cJSON-Tools.git
cd cJSON-Tools
make
./bin/json_tools -f input.json
📁 Project Structure
c-lib/- C library source code, headers, and testssrc/- C source files with optimized algorithmsinclude/- C header filestests/- Dynamic test suite and benchmarks
py-lib/- Python bindings and related filescjson_tools/- Python package sourcetests/- Python unit testsexamples/- Python usage examplesbenchmarks/- Performance testing scripts
✨ Features
🔄 JSON Flattening
- Dot Notation: Nested objects →
address.city - Array Indexing: Arrays →
skills[0],skills[1] - Type Preservation: Maintains strings, numbers, booleans, null
- Deep Nesting: Handles arbitrarily nested structures
- Batch Processing: Process thousands of objects efficiently
📋 JSON Schema Generation
- JSON Schema Draft-07: Standards-compliant schema generation
- Smart Type Detection: Handles nested objects, arrays, mixed types
- Required Properties: Automatically detects required vs optional fields
- Nullable Support: Identifies fields that can be null
- Array Analysis: Intelligent sampling for large arrays
🧹 JSON Filtering
- Remove Empty Strings: Filter out keys with empty string (
"") values - Remove Null Values: Filter out keys with
nullvalues - Recursive Processing: Works on deeply nested objects and arrays
- Structure Preservation: Maintains JSON structure while filtering
- Pretty Printing: Optional formatted output for filtered results
🔄 Regex Replacement
- Replace Keys: Use regex patterns to replace JSON keys matching specific patterns
- Replace Values: Use regex patterns to replace JSON string values matching patterns
- POSIX Regex Support: Full regex functionality on Unix-like systems (Linux, macOS)
- Type Safety: Value replacement only affects string values, preserves numbers/booleans/null
- Recursive Processing: Works on deeply nested objects and arrays
- Pattern Flexibility: Support for complex regex patterns with capture groups and anchors
⚡ Performance Optimizations
- Multi-threading: Parallel processing for large datasets
- Memory Pools: Optimized memory allocation for small strings
- Branch Prediction: Compiler hints for better CPU performance
- Adaptive Threading: Automatically chooses optimal thread count
- SIMD Optimizations: Vectorized operations where possible
- Zero-Copy: Minimal memory copying for better performance
🐍 Python Integration
- Native Performance: C-speed with Python convenience
- Pythonic API: Simple, intuitive function calls
- Type Safety: Proper error handling and validation
- Memory Management: Automatic cleanup, no memory leaks
📋 Requirements
Python Package (Recommended)
- Python: 3.6+ (3.8+ recommended)
- Compiler: Automatically handled by pip
- Platform: Linux, macOS, Windows
C Library Development
- Compiler: GCC 7+ or Clang 6+ with C99 support
- Dependencies: Integrated cJSON (no external dependencies)
- Threading: POSIX threads (pthread)
- Build Tools: Make, standard build utilities
Platform-Specific Setup
Ubuntu/Debian
sudo apt-get update
sudo apt-get install build-essential python3-dev
macOS
# Install Xcode Command Line Tools
xcode-select --install
# Or install via Homebrew
brew install python
Windows
- Install Visual Studio Build Tools or Visual Studio Community
- Python will automatically detect and use the compiler
🛠️ Installation & Setup
Option 1: Python Package (Recommended)
From PyPI
pip install cjson-tools
From Source
git clone https://github.com/amaye15/cJSON-Tools.git
cd cJSON-Tools/py-lib
pip install -e . # Development mode
# or
pip install . # Regular installation
Option 2: C Library Development
Quick Build
git clone https://github.com/amaye15/cJSON-Tools.git
cd cJSON-Tools
make # Build optimized version
make debug # Build debug version
Advanced Build Options
# Clean build
make clean && make
# Install system-wide (optional)
sudo make install
# Build with specific optimizations
CFLAGS="-O3 -march=native" make
# Build tests
cd c-lib/tests
make
Option 3: Development Setup
Full Development Environment
# Clone repository
git clone https://github.com/amaye15/cJSON-Tools.git
cd cJSON-Tools
# Build C library
make
# Setup Python development
cd py-lib
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e .
# Run tests
python3 tests/test_cjson_tools.py
cd ../c-lib/tests
./run_dynamic_tests.sh
🚀 Usage Guide
Python API (Recommended)
Basic Operations
import cjson_tools
import json
# Single object flattening
data = {"user": {"name": "John", "details": {"age": 30, "city": "NYC"}}}
flattened = cjson_tools.flatten_json(json.dumps(data))
result = json.loads(flattened)
print(result) # {"user.name": "John", "user.details.age": 30, "user.details.city": "NYC"}
# Schema generation
schema = cjson_tools.generate_schema(json.dumps(data))
schema_obj = json.loads(schema)
print(schema_obj["properties"])
Path Type Analysis
# Get flattened paths with their data types
data = {
"user": {
"name": "John",
"age": 30,
"tags": ["developer", "python"],
"address": {
"coordinates": [40.7128, -74.0060],
"city": "New York"
},
"active": True,
"metadata": None
}
}
# Analyze path types
paths_with_types = cjson_tools.get_flattened_paths_with_types(json.dumps(data))
result = json.loads(paths_with_types)
# Output shows each flattened path with its data type:
# {
# "user.name": "string",
# "user.age": "integer",
# "user.tags[0]": "string",
# "user.tags[1]": "string",
# "user.address.coordinates[0]": "number",
# "user.address.coordinates[1]": "number",
# "user.address.city": "string",
# "user.active": "boolean",
# "user.metadata": "null"
# }
# Perfect for data analysis and schema discovery!
for path, data_type in result.items():
print(f'"{path}": "{data_type}"')
Batch Processing
# Process multiple objects efficiently
objects = [
'{"id": 1, "user": {"name": "Alice"}}',
'{"id": 2, "user": {"name": "Bob", "age": 25}}',
'{"id": 3, "user": {"name": "Charlie", "location": {"city": "SF"}}}'
]
# Flatten all objects
flattened_batch = cjson_tools.flatten_json_batch(objects)
for flat in flattened_batch:
print(json.loads(flat))
# Generate unified schema from all objects
unified_schema = cjson_tools.generate_schema_batch(objects)
print(json.loads(unified_schema))
Performance Optimization
# For large datasets, enable multi-threading
large_dataset = [json.dumps({"data": i, "nested": {"value": i*2}}) for i in range(10000)]
# Auto-detect optimal thread count
result = cjson_tools.flatten_json_batch(large_dataset, use_threads=True)
# Specify thread count
result = cjson_tools.flatten_json_batch(large_dataset, use_threads=True, num_threads=4)
# Single-threaded for comparison
result = cjson_tools.flatten_json_batch(large_dataset, use_threads=False)
C Command Line Interface
# JSON Tools - High-performance JSON processing utility
# Usage: json_tools [options] [input_file]
# Options:
# -h, --help Show help message
# -f, --flatten Flatten nested JSON (default)
# -s, --schema Generate JSON schema
# -e, --remove-empty Remove keys with empty string values
# -n, --remove-nulls Remove keys with null values
# -r, --replace-keys <pattern> <replacement>
# Replace keys matching regex pattern
# -v, --replace-values <pattern> <replacement>
# Replace string values matching regex pattern
# -t, --threads [num] Use multi-threading (auto-detect optimal count)
# -p, --pretty Pretty-print output
# -o, --output <file> Write to file instead of stdout
C CLI Examples
JSON Flattening
# From file
./bin/json_tools -f input.json
# From stdin with pretty printing
cat input.json | ./bin/json_tools -f -p
# Multi-threaded processing
./bin/json_tools -f -t 4 large_batch.json
# Save to file
./bin/json_tools -f -o flattened.json input.json
Schema Generation
# Generate schema from file
./bin/json_tools -s input.json
# Multi-threaded schema generation
./bin/json_tools -s -t 4 large_batch.json
# Pretty-printed schema to file
./bin/json_tools -s -p -o schema.json input.json
Example Input/Output
JSON Flattening
Input:
{
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown"
},
"skills": ["programming", "design"]
}
Output:
{
"name": "John Doe",
"age": 30,
"address.street": "123 Main St",
"address.city": "Anytown",
"skills[0]": "programming",
"skills[1]": "design"
}
JSON Schema Generation
Input:
[
{
"id": 1,
"name": "John",
"email": "john@example.com",
"active": true
},
{
"id": 2,
"name": "Jane",
"email": "jane@example.com",
"active": false,
"tags": ["admin", "user"]
}
]
Output:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"active": {
"type": "boolean"
},
"tags": {
"type": ["array", "null"],
"items": {
"type": "string"
}
}
},
"required": ["id", "name", "email", "active"]
}
JSON Filtering
Remove Empty Strings:
# Remove keys with empty string values
echo '{"name": "John", "email": "", "phone": "123-456-7890", "bio": ""}' | ./bin/json_tools -e -
# Output: {"name":"John","phone":"123-456-7890"}
Remove Null Values:
# Remove keys with null values
echo '{"name": "John", "email": null, "phone": "123-456-7890", "address": null}' | ./bin/json_tools -n -
# Output: {"name":"John","phone":"123-456-7890"}
Complex Example:
# Input with nested objects and arrays
echo '{
"user": {
"name": "John Doe",
"email": "",
"profile": {
"bio": "",
"website": null,
"social": {
"twitter": "",
"linkedin": "john-doe",
"github": null
}
}
},
"preferences": ["", "email", null, "sms"]
}' | ./bin/json_tools -e -p -
# Removes all empty strings recursively while preserving structure
Regex Key Replacement
Replace Keys with Patterns:
# Replace session timing keys
echo '{"session.pageTimesInMs.HomePage": 1500, "session.pageTimesInMs.AboutPage": 2000, "user.name": "John"}' | \
./bin/json_tools -r '^session\.pageTimesInMs\..*$' 'session.pageTimesInMs.PrezzePage' -
# Output: {"session.pageTimesInMs.PrezzePage":1500,"session.pageTimesInMs.PrezzePage":2000,"user.name":"John"}
Regex Value Replacement
Replace String Values with Patterns:
# Replace old status values
echo '{"user": {"status": "old_active", "role": "old_admin", "name": "John"}}' | \
./bin/json_tools -v '^old_.*$' 'new_value' -
# Output: {"user":{"status":"new_value","role":"new_value","name":"John"}}
Complex Example with Both:
# Input with both keys and values to replace
echo '{
"session.timing.old_load": "old_slow",
"session.timing.old_render": "old_fast",
"user.name": "John"
}' | ./bin/json_tools -r '^session\.timing\..*$' 'session.timing.unified' -v '^old_.*$' 'new_value' -p -
# First replaces keys, then values, with pretty printing
Performance
The multi-threaded implementation is designed for processing large batches of JSON objects, though our benchmarks show interesting results:
- For small files: Single-threaded processing is generally more efficient
- For medium files: Multi-threading shows minimal improvements for specific operations
- For large files: Current implementation shows thread overhead may outweigh benefits
Benchmarks
The project includes comprehensive benchmarking tools to measure performance:
# Run mini benchmarks (quick demonstration)
cd c-lib/tests
./run_mini_benchmarks.sh
# Run full benchmarks (may take several minutes)
./run_benchmarks.sh
# Generate visualization charts
cd ../../py-lib/benchmarks
python visualize_benchmarks.py
# Generate comprehensive visualization
python visualize_comprehensive_benchmarks.py
Benchmark results are saved to c-lib/tests/benchmark_results.md and c-lib/tests/comprehensive_benchmark_results.md, with visualizations in the corresponding PNG files.
Actual Benchmark Results
Our comprehensive benchmarks revealed:
- Small files (< 100KB): Multi-threading overhead outweighs benefits, with performance similar to or worse than single-threaded processing
- Medium files (100KB-1MB): Multi-threading provides minimal improvement (0-12.5%) for schema generation
- Large files (1MB-10MB): Current multi-threaded implementation shows slight performance degradation (-7% to -8%)
Key findings:
-
Thread Overhead: For most file sizes, the overhead of creating and managing threads outweighs the benefits of parallel processing.
-
Optimal Use Case: Multi-threading appears to be most beneficial for medium-sized files (around 1,000 objects) for schema generation.
-
Future Optimizations: The multi-threaded implementation could be improved with:
- More efficient work distribution
- Thread pooling to reduce creation overhead
- Optimized memory usage to reduce cache misses
- Adaptive threading that only uses multiple threads when beneficial
For detailed benchmark analysis, see c-lib/tests/comprehensive_benchmark_results.md.
Python Usage
The Python bindings provide a simple, Pythonic interface to the cJSON-Tools library.
Installation
pip install cjson-tools
Examples
Flattening JSON
import json
from cjson_tools import flatten_json
# Flatten a single JSON object
nested_json = '''
{
"person": {
"name": "John Doe",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown",
"zip": "12345"
}
}
}
'''
flattened = flatten_json(nested_json)
print(json.loads(flattened))
# Output: {"person.name": "John Doe", "person.age": 30, "person.address.street": "123 Main St", ...}
Batch Processing
from cjson_tools import flatten_json_batch
# Process multiple JSON objects at once
json_objects = [
'{"a": {"b": 1}}',
'{"x": {"y": {"z": 2}}}'
]
flattened_batch = flatten_json_batch(json_objects)
print(flattened_batch)
# Output: ['{"a.b": 1}', '{"x.y.z": 2}']
Schema Generation
from cjson_tools import generate_schema
# Generate a schema from a JSON object
json_obj = '''
{
"id": 1,
"name": "Product",
"price": 29.99,
"tags": ["electronics", "gadget"]
}
'''
schema = generate_schema(json_obj)
print(json.loads(schema))
# Output: {"type": "object", "properties": {"id": {"type": "number"}, ...}}
Multi-threading
from cjson_tools import flatten_json_batch, generate_schema_batch
# Enable multi-threading with a specific number of threads
flattened = flatten_json_batch(large_json_list, use_threads=True, num_threads=4)
# Auto-detect the optimal number of threads
schema = generate_schema_batch(large_json_list, use_threads=True)
For more examples, see the py-lib/examples directory.
🧪 Testing
Python Tests
cd py-lib
# Run unit tests
python3 tests/test_cjson_tools.py
# Run example script
python3 examples/example.py
# Performance testing
python3 -c "
import cjson_tools
import json
import time
# Quick performance test
data = [json.dumps({'id': i, 'nested': {'value': i*2}}) for i in range(1000)]
start = time.time()
result = cjson_tools.flatten_json_batch(data, use_threads=True)
print(f'Processed {len(data)} objects in {time.time()-start:.3f}s')
"
C Library Tests
cd c-lib/tests
# Run comprehensive dynamic tests
./run_dynamic_tests.sh
# Run specific test sizes
./run_dynamic_tests.sh --sizes "100,1000,10000"
# Build and run manual tests
make
./generate_test_data test.json 1000 3
../../bin/json_tools -f test.json
Benchmarking
# Python benchmarks
cd py-lib/benchmarks
python3 benchmark.py --quick
# C library benchmarks
cd c-lib/tests
./run_benchmarks.sh
# Memory profiling (requires valgrind)
valgrind --tool=memcheck --leak-check=full ../../bin/json_tools -f large_test.json
📦 Publishing & Distribution
Python Package Publishing
Setup for PyPI
cd py-lib
# Install build tools
pip install build twine
# Update version in setup.py
# Edit setup.py: version='1.4.0'
# Build package
python3 -m build
# Test upload to TestPyPI
twine upload --repository testpypi dist/*
# Upload to PyPI
twine upload dist/*
Automated Publishing (GitHub Actions)
# .github/workflows/publish.yml
name: Publish to PyPI
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Build and publish
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
cd py-lib
pip install build twine
python -m build
twine upload dist/*
C Library Distribution
Creating Release Packages
# Create source distribution
make clean
tar -czf cjson-tools-1.4.0.tar.gz \
--exclude='.git*' \
--exclude='*.o' \
--exclude='bin/*' \
--exclude='py-lib/build' \
--exclude='py-lib/*.egg-info' \
.
# Create binary distribution (Linux)
make clean && make
mkdir -p cjson-tools-1.4.0-linux-x64/{bin,lib,include}
cp bin/json_tools cjson-tools-1.4.0-linux-x64/bin/
cp c-lib/include/*.h cjson-tools-1.4.0-linux-x64/include/
tar -czf cjson-tools-1.4.0-linux-x64.tar.gz cjson-tools-1.4.0-linux-x64/
Package Managers
Homebrew (macOS)
# Formula for Homebrew
class CjsonTools < Formula
desc "High-performance JSON processing toolkit"
homepage "https://github.com/amaye15/cJSON-Tools"
url "https://github.com/amaye15/cJSON-Tools/archive/v1.4.0.tar.gz"
sha256 "..."
def install
system "make"
bin.install "bin/json_tools"
end
test do
system "#{bin}/json_tools", "--help"
end
end
APT Repository (Ubuntu/Debian)
# Build .deb package
mkdir -p cjson-tools-1.4.0/DEBIAN
cat > cjson-tools-1.4.0/DEBIAN/control << EOF
Package: cjson-tools
Version: 1.4.0
Architecture: amd64
Maintainer: Your Name <email@example.com>
Description: High-performance JSON processing toolkit
EOF
mkdir -p cjson-tools-1.4.0/usr/bin
cp bin/json_tools cjson-tools-1.4.0/usr/bin/
dpkg-deb --build cjson-tools-1.4.0
� Automated CI/CD Pipeline
This project includes comprehensive GitHub Actions workflows for automated testing, security scanning, performance monitoring, and deployment:
🔄 Continuous Integration (ci.yml)
- Multi-platform testing: Ubuntu, macOS, Windows
- Python version matrix: 3.8, 3.9, 3.10, 3.11, 3.12
- C library testing: Build verification, memory leak detection with Valgrind
- Python package testing: Installation, functionality, performance validation
- Code quality: Black formatting, isort, flake8 linting
- Security scanning: Bandit, Safety dependency checks
- Integration tests: C CLI with Python validation, consistency checks
🔒 Security & Vulnerability Scanning (security.yml)
- Dependency scanning: Python package vulnerabilities with Safety
- Static analysis: CodeQL security analysis for C and Python
- Container security: Trivy vulnerability scanning
- License compliance: Automated license checking
- Memory safety: AddressSanitizer and Valgrind testing
- Weekly automated scans: Scheduled security monitoring
📊 Performance Monitoring (performance.yml)
- Automated benchmarks: Multi-platform performance testing
- Regression detection: Performance validation on PRs
- Scalability testing: Dataset sizes from 100 to 100K objects
- Memory efficiency: Memory usage monitoring and optimization
- Performance visualization: Automated chart generation
- Benchmark history: Long-term performance tracking
📦 Automated Publishing (publish.yml)
- Multi-platform wheels: Linux, macOS, Windows (x86_64, ARM64)
- Source distribution: Complete source package building
- PyPI publishing: Automated release to PyPI on tags
- Test PyPI: Optional test publishing for validation
- GitHub releases: Automated release asset creation
- Trusted publishing: Secure PyPI publishing with OIDC
📚 Documentation (docs.yml)
- API documentation: Automated C and Python API docs
- Usage examples: Comprehensive example generation
- Performance guides: Optimization documentation
- GitHub Pages: Automated documentation deployment
- Release validation: Version consistency checking
🎯 Workflow Features
Quality Assurance:
- ✅ Comprehensive test coverage across platforms and Python versions
- ✅ Memory leak detection with Valgrind
- ✅ Security vulnerability scanning
- ✅ Performance regression detection
- ✅ Code quality enforcement
Automation:
- 🔄 Automatic testing on every PR and push
- 📦 Automated PyPI publishing on releases
- 📊 Weekly performance and security monitoring
- 📚 Automatic documentation updates
- 🏷️ Badge updates for README
Security:
- 🔒 CodeQL static analysis
- 🛡️ Container security scanning
- 📋 License compliance monitoring
- 🔍 Dependency vulnerability tracking
- 🧪 Memory safety validation
Performance:
- ⚡ Multi-platform benchmarking
- 📈 Performance visualization
- 🎯 Regression detection
- 💾 Memory efficiency monitoring
- 📊 Throughput analysis
🚀 Getting Started with CI/CD
- Fork the repository and enable GitHub Actions
- Configure secrets for PyPI publishing (if needed)
- Create a release to trigger automated publishing
- Monitor workflows in the Actions tab
The CI/CD pipeline ensures high code quality, security, and performance while automating the entire release process from development to production deployment.
�🔧 Development & Contributing
Development Setup
# Full development environment
git clone https://github.com/amaye15/cJSON-Tools.git
cd cJSON-Tools
# Setup pre-commit hooks
pip install pre-commit
pre-commit install
# Build everything
make clean && make
cd py-lib && pip install -e . && cd ..
# Run all tests
cd c-lib/tests && ./run_dynamic_tests.sh && cd ../..
cd py-lib && python3 tests/test_cjson_tools.py && cd ..
Code Quality
# C code formatting (if clang-format available)
find c-lib -name "*.c" -o -name "*.h" | xargs clang-format -i
# Python code formatting
cd py-lib
pip install black isort flake8
black .
isort .
flake8 .
Performance Profiling
# Profile C library
cd c-lib/tests
perf record ../../bin/json_tools -f large_test.json
perf report
# Profile Python extension
cd py-lib
python3 -m cProfile -o profile.stats examples/example.py
python3 -c "import pstats; pstats.Stats('profile.stats').sort_stats('cumulative').print_stats(20)"
📄 License
This project is open source and available under the MIT License.
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
Areas for Contribution
- Performance optimizations
- Additional output formats
- Language bindings (Rust, Go, etc.)
- Documentation improvements
- Bug fixes and testing
📞 Support
- Issues: GitHub Issues
- Documentation: See
py-lib/examples/andc-lib/tests/ - Performance: Run benchmarks with
./run_dynamic_tests.sh
Metadata
Release files for cjson-tools 1.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| cjson-tools-1.9.0.tar.gz | 29.6 kB | Without provenance | Details |
Built distributions (wheels)
Total release size: 2.2 MB
Release files / cjson-tools-1.9.0.tar.gz
| Download URL | cjson-tools-1.9.0.tar.gz |
|---|---|
| Size | 29.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4738922e5994b932bd3ed1c5fa51661a41e7b440278fcd4bb709042798ae29fd
|
|
BLAKE2b-256 checksum How to use checksums |
7bff2616aade7a7434e033129e6bf1803a3fc5aba70f1e5ee94163a96c3947b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp312-cp312-win_amd64.whl
| Download URL | cjson_tools-1.9.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 40.6 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5ddf224f9cc6169289cada26ce269b932f0a514ce7f75566784d90e9f29ef2b8
|
|
BLAKE2b-256 checksum How to use checksums |
3d89c0f546ff584e6fe16c0a51dd9cf211b436b1d4d6fe992ff4f0fe1c88a4ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 152.2 kB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
d6e5602c89d5afa0065c4d265b1a096a2c3070e80a63d69e3c414383ee31f2e3
|
|
BLAKE2b-256 checksum How to use checksums |
88c0d4eaf48bb25559ba2a9861473e23ff04a08906dfa32046e4cd76d69fa069
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 156.3 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
649ba0aae0bf87c71a9572d1bd20a31e580065227c2375aab0a7daf16b014695
|
|
BLAKE2b-256 checksum How to use checksums |
18dbb6d253fea46709d174ed8b071892447a1e6079e0b41a5800d6a1e125c532
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | cjson_tools-1.9.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 45.9 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0477556baa3709df4d5aa1e7b320bac9ca680b3db9580c6c8dc826e55e6d3c15
|
|
BLAKE2b-256 checksum How to use checksums |
7c8cd623b1364a79cd74805cc71fc096049dc246b5cfcb145517c3ff3da6e7e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 47.7 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
d06307dd3db7dcbd7d738a22e19ac281964c13a442a372af85125f0da4e1e043
|
|
BLAKE2b-256 checksum How to use checksums |
543b4909a19df212d6ffc35d212e57e2b57af5ab5fee49773598f9c22aa10a7d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp311-cp311-win_amd64.whl
| Download URL | cjson_tools-1.9.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 40.5 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e77be6fde29e0df4401f1fc8b5f7aed418ee980c12007dd4e73df8b39fa246bf
|
|
BLAKE2b-256 checksum How to use checksums |
813943eb42f98cd32fcc098c341282235b7982aaa23a792c6a0792bced19a429
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 152.2 kB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
614c802544bf77f74165c927cbafcf931e210c131bf2f3462f75c093a6b06b4e
|
|
BLAKE2b-256 checksum How to use checksums |
8fdeb5042071370200b9c0e07d8b24c3aa265183f46aac2b77b20db7c463efd3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 156.3 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
0de9a33126917881405ff2031924188ec1fff9c253889c4fb2a782b82aacd2c0
|
|
BLAKE2b-256 checksum How to use checksums |
06947e628e34246c4d6cd7fded7e5252e71e33f9410a4d542deaab8533bd78ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | cjson_tools-1.9.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 45.9 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4647c2990b1a231ea91a2513fec1f10d5f6fc212fa2959b2e411675ccc51a345
|
|
BLAKE2b-256 checksum How to use checksums |
750495076ae538fd5c2b39aef8701f41e530eb5e06c5796c8479b09110ce2f58
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 47.7 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
76078b747dd778a454cf1ecbbb03c600a084eca2842bf615583d43c39eef7460
|
|
BLAKE2b-256 checksum How to use checksums |
0b69a6002d7f34a1d733e4f3287d6e34197a1fc4d4a92a368c41809db867918f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp310-cp310-win_amd64.whl
| Download URL | cjson_tools-1.9.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 40.5 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b59ba43cf73a2dee0b2eec0e0efc92160e05e2138e3fcc752854c1003eff0582
|
|
BLAKE2b-256 checksum How to use checksums |
2e729cea31f279f58c608a62723ad67f42cdebdc818f34f224ae978bd6b6bb33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp310-cp310-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 151.2 kB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
54c8a079e90e3e4b5ed659894bc7fdf78e6df09284d7ffe495aa3ec42b4a7d7e
|
|
BLAKE2b-256 checksum How to use checksums |
3a2b65948e950f1d4dcb9e9f5d5f3de8a557a4ada126b04aeb1c70cb132c0746
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 155.3 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
b0b6ac28aa847801855782df30fb83e2dcf0511a5012a82f9d4e2cae3db5a7f9
|
|
BLAKE2b-256 checksum How to use checksums |
28271e8e20d47e38bf194a06436b1011d168a5ef90b446c523c4d9808868db5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | cjson_tools-1.9.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 45.9 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
73e2ab9a98f7c7b22a28e6b82df22824cdd78369da5e149cc6aa3ef04ef19973
|
|
BLAKE2b-256 checksum How to use checksums |
a6b767eab5707f037d491871023ee7867870d406cec5226d4f7368f083625b89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 47.7 kB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
abcdd55ab0952075fd56a6d19a1715bf99af1db26b79ca080c5eb55e91aaca3b
|
|
BLAKE2b-256 checksum How to use checksums |
3835e0c76f6281c70d606f3f0d79d34d9cc8f45a02c7ad0d677a8c456b3ce0c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp39-cp39-win_amd64.whl
| Download URL | cjson_tools-1.9.0-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 40.5 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3e98d5edd1e71930808d090d1accd25d8ba1b8d1958cb8b2dd027a20e7790ff4
|
|
BLAKE2b-256 checksum How to use checksums |
94b2cae0797f0fda70510977d6aeefd25c3a8556974558fcdff0992216db5c18
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp39-cp39-musllinux_1_2_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp39-cp39-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 151.1 kB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
027b563489e079a5ba85ea855516852a4cdbde6f13bb74b6422c5162285a7f4a
|
|
BLAKE2b-256 checksum How to use checksums |
5421fc22e399d65e9a40e2ac5266cacf860ad41cc64d826e0ae91f71fead99ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 155.1 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
d5054efe3b6d91052a2a5ae878d09c7df38abc5a7a86d15b8d57450c6358bd30
|
|
BLAKE2b-256 checksum How to use checksums |
bc965e34486df9118fe440ce90bdd0ad3f1d96ef68c1f27706296f86a64120e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | cjson_tools-1.9.0-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 45.9 kB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d45681a46f631fa49afa90e5d3db0fcadc6aa07a8061ca9319c26744346dcc3b
|
|
BLAKE2b-256 checksum How to use checksums |
ec2db08bc60072be7f3e1fda8b89a2f08a25937a9c00d2d7ca6e78e1e3b1aeb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl |
|---|---|
| Size | 47.7 kB |
| Tags | CPython 3.9 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
28ca9eb08250c01c3ecee5ad30dc57584059cd74278486bdb42ca839a6600383
|
|
BLAKE2b-256 checksum How to use checksums |
acdc7be339b5b69d8957adf39e4834b50871f9934fb010e6893f5f79b6b6d535
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp38-cp38-win_amd64.whl
| Download URL | cjson_tools-1.9.0-cp38-cp38-win_amd64.whl |
|---|---|
| Size | 40.5 kB |
| Tags | CPython 3.8 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4a5255d3872619b06957f40365fbe62764aae4982dc0ccfe1434c4306679294c
|
|
BLAKE2b-256 checksum How to use checksums |
d545d1400d83fddcf1808676b5b84775e9ed8fb8963ae792b75057a94aad0210
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp38-cp38-musllinux_1_2_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp38-cp38-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 150.8 kB |
| Tags | CPython 3.8 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
1244ac1780bef29152f67acc045687df0bac3cc71a94e2bf4451ce0d600f5c98
|
|
BLAKE2b-256 checksum How to use checksums |
135668fd0e49234e844421ebcc3508a24a0f5db526c95c24ccaab21e81cdbc7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 155.3 kB |
| Tags | CPython 3.8 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
09c924886dca8d0521a8820b76cb7736fff02c8943723166a00dd82ce6792210
|
|
BLAKE2b-256 checksum How to use checksums |
7ce276825bd5366a26b58b4ed6d31aaadb8620535c7d9662f793805c9c887c59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp38-cp38-macosx_11_0_arm64.whl
| Download URL | cjson_tools-1.9.0-cp38-cp38-macosx_11_0_arm64.whl |
|---|---|
| Size | 45.7 kB |
| Tags | CPython 3.8 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2112363c8057e735979a626350f196dd64336d3a1a4ffe6c0099494d885ea4e5
|
|
BLAKE2b-256 checksum How to use checksums |
d647263cfbd9aaf5d3904029f264fe43977a574ea337b081d804cd35a1380a80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cjson_tools-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl
| Download URL | cjson_tools-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl |
|---|---|
| Size | 47.4 kB |
| Tags | CPython 3.8 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
835a414bacad77cc324141d9c3f9df633b7c732e1ebb3c6f4324e30e4a619861
|
|
BLAKE2b-256 checksum How to use checksums |
5ff78ca216f33c8686b6d035555bab1b5eb12f46fcc37df2b72f41d69520abf3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Security for cjson-tools 1.9.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.