mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-09 21:29:11 +00:00
Fallback to json5 loader if json.loads cannot parse complex json str
JSON5 spec is more flexible, try to load using a fast json5 parser if the stricter json.loads from the standard library can't load the raw complex json string into a python dictionary/list
This commit is contained in:
@@ -88,6 +88,7 @@ dependencies = [
|
|||||||
"anthropic == 0.26.1",
|
"anthropic == 0.26.1",
|
||||||
"docx2txt == 0.8",
|
"docx2txt == 0.8",
|
||||||
"google-generativeai == 0.8.3",
|
"google-generativeai == 0.8.3",
|
||||||
|
"pyjson5 == 1.6.7",
|
||||||
]
|
]
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ from time import perf_counter
|
|||||||
from typing import Any, Callable, Dict, List, Optional
|
from typing import Any, Callable, Dict, List, Optional
|
||||||
|
|
||||||
import PIL.Image
|
import PIL.Image
|
||||||
|
import pyjson5
|
||||||
import requests
|
import requests
|
||||||
import tiktoken
|
import tiktoken
|
||||||
import yaml
|
import yaml
|
||||||
@@ -565,17 +566,18 @@ def load_complex_json(json_str):
|
|||||||
processed = re.sub(pattern, replace_unescaped_quotes, cleaned)
|
processed = re.sub(pattern, replace_unescaped_quotes, cleaned)
|
||||||
|
|
||||||
# See which json loader can load the processed JSON as valid
|
# See which json loader can load the processed JSON as valid
|
||||||
errors = ""
|
errors = []
|
||||||
json_loaders_to_try = [json.loads]
|
json_loaders_to_try = [json.loads, pyjson5.loads]
|
||||||
for loads in json_loaders_to_try:
|
for loads in json_loaders_to_try:
|
||||||
try:
|
try:
|
||||||
return loads(processed)
|
return loads(processed)
|
||||||
except json.JSONDecodeError as e:
|
except (json.JSONDecodeError, pyjson5.Json5Exception) as e:
|
||||||
errors += f"\n\n{e}"
|
errors.append(f"{type(e).__name__}: {str(e)}")
|
||||||
|
|
||||||
# If all loaders fail, raise the aggregated error
|
# If all loaders fail, raise the aggregated error
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Failed to load JSON with error: {errors}\n\nWhile attempting to load this cleaned JSON:\n{processed}"
|
f"Failed to load JSON with errors: {'; '.join(errors)}\n\n"
|
||||||
|
f"While attempting to load this cleaned JSON:\n{processed}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user