Catalog PyPI
Back to packageRELEASE DETAILS

0.0.7

PyPI

ai-extract

Extract structured data from any AI. Fast. Simple. Reliable.

aianthropicclaudeextractgeminigptgrokjsonllmopenaiparsestructured-output
Published2 Mar 2026
Direct dependencies9
Transitive dependenciesNot calculated

README

Version 0.0.7 documentation

ai-extract

Extract structured data from any AI response. Fast. Simple. Reliable.

PyPI version Python 3.9+ License: MIT

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 orjson for 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 JSON
  • strategy (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:

  1. Direct Parse - Try parsing entire input as JSON
  2. Markdown Fence - Extract from ```json blocks
  3. Brace Matching - Find balanced {...} or [...]
  4. Heuristic - Pattern matching after "Here's the JSON:" etc.

License

MIT License - see LICENSE for details.

Author

Rahul Vishwakarma (@rvv-karma)

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 9

Native requirements
9 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
orjson
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
orjson>=3.9.0runtime
pytest-benchmark
Environment
{
  "extras": "",
  "marker": "extra == \"bench\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pytest-benchmark>=4.0; extra == "bench"runtime
hypothesis
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
hypothesis>=6.0; extra == "dev"runtime
mypy
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
mypy>=1.0; extra == "dev"runtime
pytest-cov
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pytest-cov>=4.0; extra == "dev"runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pytest>=7.0; extra == "dev"runtime
ruff
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
ruff>=0.1.0; extra == "dev"runtime
mkdocs-material
Environment
{
  "extras": "",
  "marker": "extra == \"docs\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
mkdocs-material>=9.0; extra == "docs"runtime
mkdocstrings
Environment
{
  "extras": "python",
  "marker": "extra == \"docs\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
mkdocstrings[python]>=0.24; extra == "docs"runtime

Distribution files

2 collected
ai_extract-0.0.7-py3-none-any.whl

bdist_wheel · 9.67 KB · Python py3

Source file
ai_extract-0.0.7.tar.gz

sdist · 15.52 KB · Python source

Source file

Repository

PENDING
anthyte/ai-extract

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 10:40 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:ba16c821aa60c17b7158f761d3e48dbf2f9c475d6ff32caea0fdefcd2843ee2e

Other collected versions

View all collected versions →