Extract structured data from any AI. Fast. Simple. Reliable.
Project description
ai-extract
Extract structured data from any AI response. Fast. Simple. Reliable.
ai-extract is a fast, lightweight Python library for extracting JSON from AI outputs. It handles markdown fences, surrounding text, and multiple JSON blocks.
Features
- Fast: Uses
orjsonfor 10x faster JSON parsing - Reliable: Multiple extraction strategies with automatic fallback
- Simple API: One function for most use cases
- CLI Tool: Quick extraction from command line
- Zero Config: Works out of the box
Installation
pip install ai-extract
Quick Start
from ai_extract import extract_json
# Extract from messy AI output
text = """
Here's the JSON you requested:
```json
{"name": "John", "age": 30}
Hope this helps! """
data = extract_json(text) print(data) # {'name': 'John', 'age': 30}
## Usage Examples
### Basic Extraction
```python
from ai_extract import extract_json
# Pure JSON
data = extract_json('{"key": "value"}')
# JSON in text
data = extract_json('The result is: {"success": true}')
# JSON in markdown fence
data = extract_json('```json\n{"data": [1,2,3]}\n```')
Multiple JSON Blocks
# Get first JSON (default)
data = extract_json('{"a": 1} and {"b": 2}')
# Returns: {'a': 1}
# Get all JSON blocks
data = extract_json('{"a": 1} and {"b": 2}', strategy="all")
# Returns: [{'a': 1}, {'b': 2}]
Error Handling
from ai_extract import extract_json, ExtractError
# Raise exception (default)
try:
data = extract_json("no json here")
except ExtractError as e:
print(f"Error: {e.message}")
print(f"Type: {e.error_type}")
# Return None instead
data = extract_json("no json here", raise_on_error=False)
# Returns: None
CLI Usage
# From argument
ai-extract '{"key": "value"}'
# From file
ai-extract -f response.txt
# From stdin
echo '{"key": "value"}' | ai-extract
# Pretty print
ai-extract -f response.txt --pretty
# Get all JSON blocks
ai-extract -f response.txt --all
# Show metadata
ai-extract -f response.txt --verbose
API Reference
extract_json(text, *, strategy="first", raise_on_error=True)
Extract JSON from text.
Parameters:
text(str): Text containing JSONstrategy(str): How to handle multiple JSON blocks"first": Return first valid JSON (default)"all": Return list of all JSON blocks
raise_on_error(bool): Raise ExtractError on failure (default: True)
Returns: Parsed JSON data, or list if strategy="all", or None if raise_on_error=False
Extraction Methods
The library tries multiple strategies in order:
- Direct Parse - Try parsing entire input as JSON
- Markdown Fence - Extract from ```json blocks
- Brace Matching - Find balanced {...} or [...]
- Heuristic - Pattern matching after "Here's the JSON:" etc.
License
MIT License - see LICENSE for details.
Author
Rahul Vishwakarma (@rvv-karma)
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 Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_extract-0.0.7.tar.gz.
File metadata
- Download URL: ai_extract-0.0.7.tar.gz
- Upload date:
- Size: 15.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0685c8819dfa2c49a2933f45ff0711b50421be488872f4cbfa99b872d9d9ccdd
|
|
| MD5 |
c5b21504eb3ca556ea1acd16183d2a96
|
|
| BLAKE2b-256 |
58b5e8c977a6f39767fa1147562169e836950384ab93316dc82db1d82ddbf5ac
|
File details
Details for the file ai_extract-0.0.7-py3-none-any.whl.
File metadata
- Download URL: ai_extract-0.0.7-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ed085e1ccd0acd60b579d7cf939eee0617274d84ea6c1fc093b98e901531e8b
|
|
| MD5 |
ff90c6ac9738afbc0a5869b41596c549
|
|
| BLAKE2b-256 |
207b8969ce54b805d372435af5f093274dde90d61056d44a9e821e6e768bbd38
|