simple json loading from data first the full data then try to find the start of the actual body find the potential json body from data sometimes the json body is prefixed with a xssi magic string specific to the server return a tuple data prefix actual json body simple json loading from data first the full data then try to find the start of the actual body find the potential json body from data sometimes the json body is prefixed with a xssi magic string specific to the server return a tuple data prefix actual json body
import json
import re
from typing import Tuple

from ..utils import load_json_preserve_order_and_dupe_keys
from .lexers.json import PREFIX_REGEX


def load_prefixed_json(data: str) -> Tuple[str, json.JSONDecoder]:
    
    
    try:
        return '', load_json_preserve_order_and_dupe_keys(data)
    except ValueError:
        pass

    
    data_prefix, body = parse_prefixed_json(data)
    try:
        return data_prefix, load_json_preserve_order_and_dupe_keys(body)
    except ValueError:
        raise ValueError('Invalid JSON')


def parse_prefixed_json(data: str) -> Tuple[str, str]:
    
    matches = re.findall(PREFIX_REGEX, data)
    data_prefix = matches[0] if matches else ''
    body = data[len(data_prefix):]
    return data_prefix, body