""" 自定义的一些 json功能 """ import json import re def underscore_to_camelcase(snake_str): """ 将下划线命名转换为驼峰命名 """ components = snake_str.split('_') return components[0] + ''.join(x.title() for x in components[1:]) def camelcase_to_underscore(camel_str): """将驼峰命名转换为下划线命名""" return re.sub(r'(?<!^)(?=[A-Z])', '_', camel_str).lower() def convert_keys_to_camelcase(obj): """ 递归处理 JSON 对象 """ if isinstance(obj, dict): new_obj = {} for k, v in obj.items(): new_key = underscore_to_camelcase(k) new_obj[new_key] = convert_keys_to_camelcase(v) return new_obj elif isinstance(obj, list): return [convert_keys_to_camelcase(item) for item in obj] else: return obj def convert_keys_to_underscore(obj): if isinstance(obj, dict): new_obj = {} for k, v in obj.items(): new_key = camelcase_to_underscore(k) new_obj[new_key] = convert_keys_to_underscore(v) return new_obj elif isinstance(obj, list): return [convert_keys_to_underscore(item) for item in obj] else: return obj def get_json_from_content(content:str, key:str): """ 从不规则的长字符中解析出想要的 json文件 :param content: :param key 想要获得的 key :return: """ inside_items = False # 标志是否进入 items 部分 items_buffer = "" # 临时保存 JSON 部分 for line in content.splitlines(): # 通过简单的规则修复非标准 JSON 格式(可以根据实际情况定制) line = line.strip() # 去掉多余的空白字符 if f'"${key}"' in line: items_buffer = '{' inside_items = True # 发现目标字段 continue # 处理 items 数组的部分 if inside_items: items_buffer += line # 累积读取多行 # 如果找到了 JSON 数组的结束 if '"items": [' in items_buffer and ']' in items_buffer: try: # 尝试解析 JSON data = json.loads(items_buffer) # 获取第一个 item return data except json.JSONDecodeError: continue # 如果解析失败,继续读取下一行 return None # 如果没有找到匹配项 def find_key(data, target_key): if isinstance(data, dict): # 如果是字典,递归查找每个键 for key, value in data.items(): if key == target_key: return value result = find_key(value, target_key) if result: return result elif isinstance(data, list): # 如果是列表,递归查找每个元素 for item in data: result = find_key(item, target_key) if result: return result return None