101 lines
3.0 KiB
Python
101 lines
3.0 KiB
Python
import json
|
|
|
|
|
|
def json_to_string(json_data):
|
|
"""
|
|
将JSON数据转换为使用指定分隔符的字符串
|
|
使用 |###| 作为键值对分隔符
|
|
使用 |##| 作为列表元素分隔符
|
|
|
|
Args:
|
|
json_data (dict): 要转换的JSON数据
|
|
|
|
Returns:
|
|
str: 转换后的字符串
|
|
"""
|
|
if not isinstance(json_data, dict):
|
|
raise ValueError("输入必须是字典类型")
|
|
|
|
result_parts = []
|
|
|
|
for key, value in json_data.items():
|
|
if isinstance(value, list):
|
|
# 处理列表:使用 |##| 分隔列表元素
|
|
list_str = "|##|".join(str(item) for item in value)
|
|
result_parts.append(f"{key}:[{list_str}]")
|
|
else:
|
|
# 处理普通值
|
|
result_parts.append(f"{key}:{value}")
|
|
|
|
# 使用 |###| 分隔键值对
|
|
return "|###|".join(result_parts)
|
|
|
|
|
|
def string_to_json(data_string):
|
|
"""
|
|
将使用指定分隔符的字符串转换回JSON格式
|
|
解析使用 |###| 分隔的键值对
|
|
解析使用 |##| 分隔的列表元素
|
|
|
|
Args:
|
|
data_string (str): 要转换的字符串
|
|
|
|
Returns:
|
|
dict: 转换后的JSON数据
|
|
"""
|
|
if not isinstance(data_string, str):
|
|
raise ValueError("输入必须是字符串类型")
|
|
|
|
if not data_string.strip():
|
|
return {}
|
|
|
|
result = {}
|
|
|
|
# 使用 |###| 分割键值对
|
|
pairs = data_string.split("|###|")
|
|
|
|
for pair in pairs:
|
|
if ":" not in pair:
|
|
continue
|
|
|
|
# 分割键和值
|
|
key, value = pair.split(":", 1)
|
|
key = key.strip()
|
|
value = value.strip()
|
|
|
|
# 检查是否是列表格式 [...]
|
|
if value.startswith("[") and value.endswith("]"):
|
|
# 处理列表
|
|
list_content = value[1:-1] # 去掉方括号
|
|
if list_content:
|
|
# 使用 |##| 分割列表元素
|
|
items = list_content.split("|##|")
|
|
# 尝试转换为适当的数据类型
|
|
converted_items = []
|
|
for item in items:
|
|
item = item.strip()
|
|
# 尝试转换为数字
|
|
try:
|
|
if "." in item:
|
|
converted_items.append(float(item))
|
|
else:
|
|
converted_items.append(int(item))
|
|
except ValueError:
|
|
# 如果不是数字,保持为字符串
|
|
converted_items.append(item)
|
|
result[key] = converted_items
|
|
else:
|
|
result[key] = []
|
|
else:
|
|
# 处理普通值,尝试转换为适当的数据类型
|
|
try:
|
|
if "." in value:
|
|
result[key] = float(value)
|
|
else:
|
|
result[key] = int(value)
|
|
except ValueError:
|
|
# 如果不是数字,保持为字符串
|
|
result[key] = value
|
|
|
|
return result
|