Yiqiao Jin
Initial Commit
bdafe83
import json
import re
def is_json(myjson):
"""
Checks whether a given string is a valid JSON.
Parameters:
myjson (str): The string to be checked.
Returns:
bool: True if the string is a valid JSON, False otherwise.
"""
try:
_ = json.loads(myjson)
except ValueError:
return False
return True
def is_json_inside(text):
"""
Checks whether a given string contains valid JSON(s).
Parameters:
text (str): The string to be checked.
Returns:
bool: True if the string contains valid JSON(s), False otherwise.
"""
text = re.sub(r"\s+", " ", text)
matches = re.findall(r"\{.*?\}", text)
for match in matches:
if is_json(match):
return True
return False
def extract_jsons(text):
"""
Extracts all valid JSON objects from a given string.
Parameters:
text (str): The string from which JSON objects are to be extracted.
Returns:
List[Dict]: A list of all extracted JSON objects.
"""
text = re.sub(r"\s+", " ", text)
matches = re.findall(r"\{.*?\}", text)
parsed_jsons = []
for match in matches:
try:
json_object = json.loads(match)
parsed_jsons.append(json_object)
except ValueError:
pass
return parsed_jsons
def extract_code(text):
"""
Extracts all code blocks encapsulated by '```' from a given string.
Parameters:
text (str): The string from which Python code blocks are to be extracted.
Returns:
List[str]: A list of all extracted Python code blocks.
"""
text = re.sub("```python", "```", text)
matches = re.findall(r"```(.*?)```", text, re.DOTALL)
parsed_codes = []
for match in matches:
parsed_codes.append(match)
return parsed_codes
class AttributedDict(dict):
"""
A dictionary class whose keys are automatically set as attributes of the class.
The dictionary is serializable to JSON.
Inherits from:
dict: Built-in dictionary class in Python.
Note:
This class provides attribute-style access to dictionary keys, meaning you can use dot notation
(like `my_dict.my_key`) in addition to the traditional bracket notation (`my_dict['my_key']`).
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def __setattr__(self, key, value):
self[key] = value
def __getattr__(self, key):
if key in self:
return self[key]
raise AttributeError
def __delattr__(self, key):
del self[key]
# check whether the key is string when adding the key
def __setitem__(self, key, value):
if not isinstance(key, str):
raise ValueError("The key must be a string")
super().__setitem__(key, value)
def update(self, *args, **kwargs):
for key, value in dict(*args, **kwargs).items():
self[key] = value