|
import ast |
|
import json |
|
def format_load(raw_data: str, start_character: str = '', end_character: str = ''): |
|
"""Format the raw data into the format that can be evaluated. |
|
|
|
Args: |
|
raw_data (str): The raw data. |
|
start_character (str, optional): The start character. Defaults to '', if using it, the string will be sliced from the first start_character. |
|
end_character (str, optional): The end character. Defaults to '', if using it, the string will be sliced to the last end_character. |
|
|
|
Returns: |
|
str: The formatted data. |
|
""" |
|
if type(raw_data) != str: |
|
|
|
return raw_data |
|
if "```json" in raw_data: |
|
raw_data = raw_data[raw_data.find("```json") + len("```json"):] |
|
raw_data = raw_data.strip("`") |
|
if start_character != '': |
|
raw_data = raw_data[raw_data.find(start_character):] |
|
if end_character != '': |
|
raw_data = raw_data[:raw_data.rfind(end_character) + len(end_character)] |
|
successful_parse = False |
|
try: |
|
data = ast.literal_eval(raw_data) |
|
successful_parse = True |
|
except Exception as e: |
|
pass |
|
try: |
|
if not successful_parse: |
|
data = json.loads(raw_data) |
|
successful_parse = True |
|
except Exception as e: |
|
pass |
|
try: |
|
if not successful_parse: |
|
data = json.loads(raw_data.replace("\'", "\"")) |
|
successful_parse = True |
|
except Exception as e: |
|
pass |
|
if not successful_parse: |
|
raise Exception("Cannot parse raw data") |
|
return data |
|
|