Skip to main content

High-performance Python bindings for JSON flattening, path type analysis, and schema generation

Project description

cJSON-Tools

CI Security Performance PyPI Python License Downloads Documentation

A high-performance C toolkit for transforming and analyzing JSON data with Python bindings. cJSON-Tools provides powerful tools for:

  1. JSON Flattening: Converts nested JSON structures into flat key-value pairs
  2. Path Type Analysis: Get flattened paths with their data types for schema discovery
  3. JSON Schema Generation: Analyzes JSON objects and generates a unified JSON schema
  4. JSON Filtering: Remove keys with empty string values or null values
  5. Multi-threading Support: Optimized performance for processing large JSON datasets
  6. Performance Optimized: SIMD instructions, memory pools, and cache-friendly algorithms
  7. 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 tests
    • src/ - C source files with optimized algorithms
    • include/ - C header files
    • tests/ - Dynamic test suite and benchmarks
  • py-lib/ - Python bindings and related files
    • cjson_tools/ - Python package source
    • tests/ - Python unit tests
    • examples/ - Python usage examples
    • benchmarks/ - 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 null values
  • 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

Benchmark Charts

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:

  1. Thread Overhead: For most file sizes, the overhead of creating and managing threads outweighs the benefits of parallel processing.

  2. Optimal Use Case: Multi-threading appears to be most beneficial for medium-sized files (around 1,000 objects) for schema generation.

  3. 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

  1. Fork the repository and enable GitHub Actions
  2. Configure secrets for PyPI publishing (if needed)
  3. Create a release to trigger automated publishing
  4. 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/ and c-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

cjson-tools-1.8.0.tar.gz (27.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cjson_tools-1.8.0-cp312-cp312-win_amd64.whl (39.3 kB view details)

Uploaded CPython 3.12Windows x86-64

cjson_tools-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl (147.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

cjson_tools-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (151.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

cjson_tools-1.8.0-cp312-cp312-macosx_11_0_arm64.whl (43.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cjson_tools-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl (45.7 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

cjson_tools-1.8.0-cp311-cp311-win_amd64.whl (39.2 kB view details)

Uploaded CPython 3.11Windows x86-64

cjson_tools-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl (147.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

cjson_tools-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (151.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

cjson_tools-1.8.0-cp311-cp311-macosx_11_0_arm64.whl (43.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cjson_tools-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl (45.6 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

cjson_tools-1.8.0-cp310-cp310-win_amd64.whl (39.2 kB view details)

Uploaded CPython 3.10Windows x86-64

cjson_tools-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl (146.1 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

cjson_tools-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (150.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

cjson_tools-1.8.0-cp310-cp310-macosx_11_0_arm64.whl (43.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cjson_tools-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl (45.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

cjson_tools-1.8.0-cp39-cp39-win_amd64.whl (39.2 kB view details)

Uploaded CPython 3.9Windows x86-64

cjson_tools-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl (145.9 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

cjson_tools-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (150.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

cjson_tools-1.8.0-cp39-cp39-macosx_11_0_arm64.whl (43.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

cjson_tools-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl (45.6 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

cjson_tools-1.8.0-cp38-cp38-win_amd64.whl (39.2 kB view details)

Uploaded CPython 3.8Windows x86-64

cjson_tools-1.8.0-cp38-cp38-musllinux_1_2_x86_64.whl (145.7 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

cjson_tools-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (150.3 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

cjson_tools-1.8.0-cp38-cp38-macosx_11_0_arm64.whl (43.6 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

cjson_tools-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl (45.4 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

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

Hashes for cjson-tools-1.8.0.tar.gz
Algorithm Hash digest
SHA256 4ebe872762c1192db484cb303658dd4e00de1292e3eaf6e284ed42a969fecf50
MD5 e18b204b740184e7a6c206ff2b4f770d
BLAKE2b-256 de2403018070c06c0b129f6952d73348b0fc83c206e72edd98c446d8005fd814

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cd6f8d82fd1b4e1fb0b61f09f06619349d6b7aecc489968f6c24d4daad809b2e
MD5 18e89c4cf6f6d433557e8e46bf952390
BLAKE2b-256 e596cf96f9b582be76c6b87ce7d6c8e2ea5347daf8e9b4768b0cbcbfc52418af

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5bab40754a24b9b15082086b8beda374390f99428e0a4d6de058b00e101a3ae3
MD5 706bf8eeaf1f065ea9defffd1238d8f0
BLAKE2b-256 999b6b2f7363191ca1c5a4fd8d608ee39f20ba07261ade2a7af155a89c9534a1

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1d7cb6de908395f7ec66978ae3a7ee989486c6f6dd725f47978e2d288debe97a
MD5 e1bc16f0e82de5aaecfe27498586bdce
BLAKE2b-256 8dee111985366b447b09522299d5f24044b4c001e3da6c1f66a68d3efc281c48

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b072e8bd19834629c6994454c82e879aaa6abff977c454633b7d362a1f0478b
MD5 1def06bb2b8d9f5fdec6cda83b41055c
BLAKE2b-256 305856639cc4a642bebab23b32e59b1124ac493b684a33ac20c5151f5f6a45e7

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 8d1d987f786f228123809ff9ba726e94e97f811a9ccd5fcf12b9882bcf8a8f9e
MD5 6b91d5b2f723a03b9290b03efe6f73a4
BLAKE2b-256 ff302108da81d9a910f7ce96f3246d6b528a9dbe72e3e91f835d71e7adb9a183

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2e4c0654a132ed5fd9a943550ab4319200802ac8092c09f475230e8a0afb73ec
MD5 d123cbb84eee3855fdee170b0baa4041
BLAKE2b-256 1a464f0150095d06e034c32d02a46c204929f6f0ea654e80fb185b0bd85fb622

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1b033239b0c34e244c7619167c674ac145b55d28e9a76074775764e325cd5148
MD5 06aa626fc5259a6663c8268cd1016774
BLAKE2b-256 da22ec91cd12391dcab909fab1e855e4b8e79e565dcc6f8ba698098a615b3dbe

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3e7b584adb342bd02e57280276822cfe43932f91ef835d98a5bac1ac6a92e7b8
MD5 f61ff9050271149ff85be5acfa456c2c
BLAKE2b-256 708978ea1312888ea0863cadc8ea4675e3c3da1916a52d711d07641f27c24558

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d96aa5ff9f7f6ee3243e6dc819050d75797a488a82539166f256af14a528a8fa
MD5 c748b5fbdf5076a604886f43646f6cb9
BLAKE2b-256 44991352c4b1ab3fcb0e6ac9ce89e0bd790c494a5783a7ff35f66763521e09fb

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4c28c15ee6c0a433088ef3f0d7b5a26766192646feb241b6ce216ecbfe67dfd0
MD5 68c2f3ff1be68927ef5ce18f86c096e8
BLAKE2b-256 59302fd096be3108f53626e5e4caa0f85d04bcd5f58b75e01bb15e69e1f73536

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 94a474a71fa94ee71885afa9f195202054339b57a9292d5f3fbe88a4ab441818
MD5 29a08e0ea9c77b493f53ef47d5f1c595
BLAKE2b-256 fa35c5baa3f7a5f9306374e036116840c2aa12f0820cdb3d15de839e387167f0

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4787396777631f55bc8db1440e06f7e79fe6562b720f5b40a8f80be0495e374d
MD5 b01e75654fb2c842c7482c05b403aacf
BLAKE2b-256 fdfdf808a3d01ec82fa8868d70e5bfd86c85b3621de997cda40a98e4f4691e3e

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 14d939748ddc30d8d04ed2d0f9211ee214c35d87c8046d969dd126be634faae3
MD5 cee84fd25d0abf869c86ca86ac8a7835
BLAKE2b-256 303173c46cd26ddae428300954cd5f85ac825eb6094a4801da6ff5d85954fbde

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56aa134ef55257fb1139161d2c541418ee7a936bbaef471505baf4dae2e02651
MD5 809f5369e10cdd5dbedb3df679920ec0
BLAKE2b-256 c3982a4615b1662d93dcd6fc1ccde0f4c56753a0a15e162b190edf15a95dd9a1

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0778f2324ed4b42fedd9a3b27939286739fed3b88e167e84fccd423c8ec59c22
MD5 12c68fe74688939547be69497ad6b199
BLAKE2b-256 836175b11939628616452523481e750084bc49d13810abefda6ee2d8c5aa0133

See more details on using hashes here.

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

Hashes for cjson_tools-1.8.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 cdda772efb2b5ea8e100f7826b840d19284059ad70cd7e011d49dfee038a8596
MD5 c274ab8c5f4dd79e2751a87e5443a6ce
BLAKE2b-256 285af9ef42184e5e9bd5a6fcbed53e65191d410771beaef3b7977de321f08d50

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a889acb9e0a6db3841238c713b632848c92b766cd68b2d0ee63f8493056da2e2
MD5 98d34340edf4f1c409c324fc7f9aa72f
BLAKE2b-256 ff6e535174b4007495f8310d3d732293f10c5ca3b3bf0305b5d8ace1f40a5a88

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0fb962bf6243a71eac8e2f0f948c1a64eaa8f61170445a9818a75af345729c2e
MD5 66dab943f46951adcc14c238cc809d2c
BLAKE2b-256 38659db1c0a57fa2f0d4b0ba55f3496485e186e286e095f7d626439f227311be

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c3d77ffd3af92665f4d4f7c927023e0df193c8caa7cf7170eda7043331bd049
MD5 395979f049bbe33ae2095efb6d5f7e74
BLAKE2b-256 36a0de8e473358186b2a348bc6ee4b52e15683fabd021fae4c7720625665b28c

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 331e4f57a86ecee8a12fa5d598aa2ed626301fc09e0db0133dca076b035e531a
MD5 4a4adf2e95b6c5217ccc6a14a3f94c96
BLAKE2b-256 749bbd0ed766ce5c65a96f48deb1672117ce9e75958c9b2ac09edc77167277cc

See more details on using hashes here.

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

Hashes for cjson_tools-1.8.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 9800d55c7dd41562a45301e204316f5d10aea89f1bcf72b6b8415f6be73619b0
MD5 5069d9ddb683813cf40b720187aa16d8
BLAKE2b-256 286927f029aa5bea7a8430dd422a7eeb2f278ba00f3b0ea210ef8616f8ef52f0

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e081724561dea68555c50aa788cd85e9798693194e6cff719a11e2cc3d4c8b97
MD5 b951bf8d68ab9fc6f4797af29dfa12b2
BLAKE2b-256 c64bf97bc761f4dafa3ee3019655f159efe4474285e5e91add5bf29617471cc6

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 43831840fd5d0bee2ae8373ea330c12a6320cc75365394263165baeb2f436e5e
MD5 76992d774d65005dcc70227c0ee8e7f3
BLAKE2b-256 049f64cb0779319347f02200eb300dd335aac19c4e71a07a29d803e0f92c8824

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c490894b3c15de1837cf94bb057f0300f2b2bd9bb388f6a17d7aae5536f72551
MD5 34399ede3e459df88794597e213237e8
BLAKE2b-256 58420c624195cc16bd2dfbf3e6c5b8365ba39b6125040fdc0ba3c290403023ff

See more details on using hashes here.

File details

Details for the file cjson_tools-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cjson_tools-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 81a054002847da501eb04feacd2919402ca6cd9dd6e197e0d656a1a0485606b3
MD5 a60efd2574dafd1e3d1b55112db9d5bb
BLAKE2b-256 841b06f92fb1d60ee6f25766898b3c400364a74695c54be1404a2edc95e43efc

See more details on using hashes here.

Supported by

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