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
