Spaces:
Running
Running
File size: 1,129 Bytes
2ebf97a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | from __future__ import annotations
import json
import logging
import re
from typing import Any, List
logger = logging.getLogger(__name__)
def extract_json_blocks(text: str) -> List[Any]:
blocks: List[Any] = []
stripped = text.strip()
try:
blocks.append(json.loads(stripped))
return blocks
except json.JSONDecodeError:
pass
pattern = r"```json\s*\n?(.*?)```"
for match in re.findall(pattern, text, re.DOTALL):
stripped = match.strip()
if stripped:
try:
blocks.append(json.loads(stripped))
except json.JSONDecodeError:
logger.warning("Failed to parse JSON block: %s", stripped[:100])
if not blocks:
for delim in (("{", "}"), ("[", "]")):
start = text.find(delim[0])
end = text.rfind(delim[1])
if start != -1 and end != -1 and end > start:
candidate = text[start : end + 1]
try:
blocks.append(json.loads(candidate))
except json.JSONDecodeError:
pass
return blocks
|