High-performance Python bindings for JSON flattening, path type analysis, and schema generation
Project description
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
- 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"}
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
⚡ 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
# -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
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
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
Built Distributions
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 cjson-tools-1.8.0.tar.gz.
File metadata
- Download URL: cjson-tools-1.8.0.tar.gz
- Upload date:
- Size: 27.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ebe872762c1192db484cb303658dd4e00de1292e3eaf6e284ed42a969fecf50
|
|
| MD5 |
e18b204b740184e7a6c206ff2b4f770d
|
|
| BLAKE2b-256 |
de2403018070c06c0b129f6952d73348b0fc83c206e72edd98c446d8005fd814
|
File details
Details for the file cjson_tools-1.8.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 39.3 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd6f8d82fd1b4e1fb0b61f09f06619349d6b7aecc489968f6c24d4daad809b2e
|
|
| MD5 |
18e89c4cf6f6d433557e8e46bf952390
|
|
| BLAKE2b-256 |
e596cf96f9b582be76c6b87ce7d6c8e2ea5347daf8e9b4768b0cbcbfc52418af
|
File details
Details for the file cjson_tools-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 147.1 kB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bab40754a24b9b15082086b8beda374390f99428e0a4d6de058b00e101a3ae3
|
|
| MD5 |
706bf8eeaf1f065ea9defffd1238d8f0
|
|
| BLAKE2b-256 |
999b6b2f7363191ca1c5a4fd8d608ee39f20ba07261ade2a7af155a89c9534a1
|
File details
Details for the file cjson_tools-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 151.3 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d7cb6de908395f7ec66978ae3a7ee989486c6f6dd725f47978e2d288debe97a
|
|
| MD5 |
e1bc16f0e82de5aaecfe27498586bdce
|
|
| BLAKE2b-256 |
8dee111985366b447b09522299d5f24044b4c001e3da6c1f66a68d3efc281c48
|
File details
Details for the file cjson_tools-1.8.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 43.9 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b072e8bd19834629c6994454c82e879aaa6abff977c454633b7d362a1f0478b
|
|
| MD5 |
1def06bb2b8d9f5fdec6cda83b41055c
|
|
| BLAKE2b-256 |
305856639cc4a642bebab23b32e59b1124ac493b684a33ac20c5151f5f6a45e7
|
File details
Details for the file cjson_tools-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 45.7 kB
- Tags: CPython 3.12, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d1d987f786f228123809ff9ba726e94e97f811a9ccd5fcf12b9882bcf8a8f9e
|
|
| MD5 |
6b91d5b2f723a03b9290b03efe6f73a4
|
|
| BLAKE2b-256 |
ff302108da81d9a910f7ce96f3246d6b528a9dbe72e3e91f835d71e7adb9a183
|
File details
Details for the file cjson_tools-1.8.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 39.2 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e4c0654a132ed5fd9a943550ab4319200802ac8092c09f475230e8a0afb73ec
|
|
| MD5 |
d123cbb84eee3855fdee170b0baa4041
|
|
| BLAKE2b-256 |
1a464f0150095d06e034c32d02a46c204929f6f0ea654e80fb185b0bd85fb622
|
File details
Details for the file cjson_tools-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 147.2 kB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b033239b0c34e244c7619167c674ac145b55d28e9a76074775764e325cd5148
|
|
| MD5 |
06aa626fc5259a6663c8268cd1016774
|
|
| BLAKE2b-256 |
da22ec91cd12391dcab909fab1e855e4b8e79e565dcc6f8ba698098a615b3dbe
|
File details
Details for the file cjson_tools-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 151.3 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e7b584adb342bd02e57280276822cfe43932f91ef835d98a5bac1ac6a92e7b8
|
|
| MD5 |
f61ff9050271149ff85be5acfa456c2c
|
|
| BLAKE2b-256 |
708978ea1312888ea0863cadc8ea4675e3c3da1916a52d711d07641f27c24558
|
File details
Details for the file cjson_tools-1.8.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 43.9 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d96aa5ff9f7f6ee3243e6dc819050d75797a488a82539166f256af14a528a8fa
|
|
| MD5 |
c748b5fbdf5076a604886f43646f6cb9
|
|
| BLAKE2b-256 |
44991352c4b1ab3fcb0e6ac9ce89e0bd790c494a5783a7ff35f66763521e09fb
|
File details
Details for the file cjson_tools-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 45.6 kB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c28c15ee6c0a433088ef3f0d7b5a26766192646feb241b6ce216ecbfe67dfd0
|
|
| MD5 |
68c2f3ff1be68927ef5ce18f86c096e8
|
|
| BLAKE2b-256 |
59302fd096be3108f53626e5e4caa0f85d04bcd5f58b75e01bb15e69e1f73536
|
File details
Details for the file cjson_tools-1.8.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 39.2 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94a474a71fa94ee71885afa9f195202054339b57a9292d5f3fbe88a4ab441818
|
|
| MD5 |
29a08e0ea9c77b493f53ef47d5f1c595
|
|
| BLAKE2b-256 |
fa35c5baa3f7a5f9306374e036116840c2aa12f0820cdb3d15de839e387167f0
|
File details
Details for the file cjson_tools-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 146.1 kB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4787396777631f55bc8db1440e06f7e79fe6562b720f5b40a8f80be0495e374d
|
|
| MD5 |
b01e75654fb2c842c7482c05b403aacf
|
|
| BLAKE2b-256 |
fdfdf808a3d01ec82fa8868d70e5bfd86c85b3621de997cda40a98e4f4691e3e
|
File details
Details for the file cjson_tools-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 150.2 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14d939748ddc30d8d04ed2d0f9211ee214c35d87c8046d969dd126be634faae3
|
|
| MD5 |
cee84fd25d0abf869c86ca86ac8a7835
|
|
| BLAKE2b-256 |
303173c46cd26ddae428300954cd5f85ac825eb6094a4801da6ff5d85954fbde
|
File details
Details for the file cjson_tools-1.8.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 43.9 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56aa134ef55257fb1139161d2c541418ee7a936bbaef471505baf4dae2e02651
|
|
| MD5 |
809f5369e10cdd5dbedb3df679920ec0
|
|
| BLAKE2b-256 |
c3982a4615b1662d93dcd6fc1ccde0f4c56753a0a15e162b190edf15a95dd9a1
|
File details
Details for the file cjson_tools-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 45.6 kB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0778f2324ed4b42fedd9a3b27939286739fed3b88e167e84fccd423c8ec59c22
|
|
| MD5 |
12c68fe74688939547be69497ad6b199
|
|
| BLAKE2b-256 |
836175b11939628616452523481e750084bc49d13810abefda6ee2d8c5aa0133
|
File details
Details for the file cjson_tools-1.8.0-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 39.2 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdda772efb2b5ea8e100f7826b840d19284059ad70cd7e011d49dfee038a8596
|
|
| MD5 |
c274ab8c5f4dd79e2751a87e5443a6ce
|
|
| BLAKE2b-256 |
285af9ef42184e5e9bd5a6fcbed53e65191d410771beaef3b7977de321f08d50
|
File details
Details for the file cjson_tools-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 145.9 kB
- Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a889acb9e0a6db3841238c713b632848c92b766cd68b2d0ee63f8493056da2e2
|
|
| MD5 |
98d34340edf4f1c409c324fc7f9aa72f
|
|
| BLAKE2b-256 |
ff6e535174b4007495f8310d3d732293f10c5ca3b3bf0305b5d8ace1f40a5a88
|
File details
Details for the file cjson_tools-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 150.1 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fb962bf6243a71eac8e2f0f948c1a64eaa8f61170445a9818a75af345729c2e
|
|
| MD5 |
66dab943f46951adcc14c238cc809d2c
|
|
| BLAKE2b-256 |
38659db1c0a57fa2f0d4b0ba55f3496485e186e286e095f7d626439f227311be
|
File details
Details for the file cjson_tools-1.8.0-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 43.9 kB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c3d77ffd3af92665f4d4f7c927023e0df193c8caa7cf7170eda7043331bd049
|
|
| MD5 |
395979f049bbe33ae2095efb6d5f7e74
|
|
| BLAKE2b-256 |
36a0de8e473358186b2a348bc6ee4b52e15683fabd021fae4c7720625665b28c
|
File details
Details for the file cjson_tools-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 45.6 kB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
331e4f57a86ecee8a12fa5d598aa2ed626301fc09e0db0133dca076b035e531a
|
|
| MD5 |
4a4adf2e95b6c5217ccc6a14a3f94c96
|
|
| BLAKE2b-256 |
749bbd0ed766ce5c65a96f48deb1672117ce9e75958c9b2ac09edc77167277cc
|
File details
Details for the file cjson_tools-1.8.0-cp38-cp38-win_amd64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 39.2 kB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9800d55c7dd41562a45301e204316f5d10aea89f1bcf72b6b8415f6be73619b0
|
|
| MD5 |
5069d9ddb683813cf40b720187aa16d8
|
|
| BLAKE2b-256 |
286927f029aa5bea7a8430dd422a7eeb2f278ba00f3b0ea210ef8616f8ef52f0
|
File details
Details for the file cjson_tools-1.8.0-cp38-cp38-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp38-cp38-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 145.7 kB
- Tags: CPython 3.8, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e081724561dea68555c50aa788cd85e9798693194e6cff719a11e2cc3d4c8b97
|
|
| MD5 |
b951bf8d68ab9fc6f4797af29dfa12b2
|
|
| BLAKE2b-256 |
c64bf97bc761f4dafa3ee3019655f159efe4474285e5e91add5bf29617471cc6
|
File details
Details for the file cjson_tools-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 150.3 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43831840fd5d0bee2ae8373ea330c12a6320cc75365394263165baeb2f436e5e
|
|
| MD5 |
76992d774d65005dcc70227c0ee8e7f3
|
|
| BLAKE2b-256 |
049f64cb0779319347f02200eb300dd335aac19c4e71a07a29d803e0f92c8824
|
File details
Details for the file cjson_tools-1.8.0-cp38-cp38-macosx_11_0_arm64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp38-cp38-macosx_11_0_arm64.whl
- Upload date:
- Size: 43.6 kB
- Tags: CPython 3.8, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c490894b3c15de1837cf94bb057f0300f2b2bd9bb388f6a17d7aae5536f72551
|
|
| MD5 |
34399ede3e459df88794597e213237e8
|
|
| BLAKE2b-256 |
58420c624195cc16bd2dfbf3e6c5b8365ba39b6125040fdc0ba3c290403023ff
|
File details
Details for the file cjson_tools-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cjson_tools-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl
- Upload date:
- Size: 45.4 kB
- Tags: CPython 3.8, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81a054002847da501eb04feacd2919402ca6cd9dd6e197e0d656a1a0485606b3
|
|
| MD5 |
a60efd2574dafd1e3d1b55112db9d5bb
|
|
| BLAKE2b-256 |
841b06f92fb1d60ee6f25766898b3c400364a74695c54be1404a2edc95e43efc
|