import json from json import JSONDecodeError, JSONDecoder from typing import Any, Tuple import partial_json_parser from partial_json_parser.core.options import Allow def _find_common_prefix(s1: str, s2: str) -> str: prefix = "" min_length = min(len(s1), len(s2)) for i in range(0, min_length): if s1[i] == s2[i]: prefix += s1[i] else: break return prefix def _partial_json_loads(input_str: str, flags: Allow) -> Tuple[Any, int]: try: return (partial_json_parser.loads(input_str, flags), len(input_str)) except JSONDecodeError as e: if "Extra data" in e.msg: dec = JSONDecoder() return dec.raw_decode(input_str) raise def _is_complete_json(input_str: str) -> bool: try: json.loads(input_str) return True except JSONDecodeError: return False