MST
星途 面试题库

面试题:Python实现复杂嵌套字典与JSON相互转换并处理特殊字符

假设有一个复杂嵌套的字典,其中可能包含列表、字典嵌套,并且部分值包含特殊字符(如换行符、制表符等)。请编写Python函数,实现将这个复杂字典转换为JSON字符串,同时编写另一个函数将该JSON字符串再转换回原始字典,要保证数据的完整性和正确性。
35.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import json


def dict_to_json(dictionary):
    def escape_special_chars(value):
        if isinstance(value, str):
            return value.replace('\n', '\\n').replace('\t', '\\t')
        return value

    def process_nested(data):
        if isinstance(data, dict):
            return {key: process_nested(value) for key, value in data.items()}
        elif isinstance(data, list):
            return [process_nested(item) for item in data]
        else:
            return escape_special_chars(data)

    processed_dict = process_nested(dictionary)
    return json.dumps(processed_dict)


def json_to_dict(json_str):
    def unescape_special_chars(value):
        if isinstance(value, str):
            return value.replace('\\n', '\n').replace('\\t', '\t')
        return value

    def process_nested(data):
        if isinstance(data, dict):
            return {key: process_nested(value) for key, value in data.items()}
        elif isinstance(data, list):
            return [process_nested(item) for item in data]
        else:
            return unescape_special_chars(data)

    loaded_dict = json.loads(json_str)
    return process_nested(loaded_dict)


你可以使用以下方式调用:

# 示例复杂嵌套字典
complex_dict = {
    "key1": "value1\nwith newline",
    "key2": [1, 2, "value3\twith tab"],
    "key3": {
        "sub_key1": "sub_value1"
    }
}
json_str = dict_to_json(complex_dict)
recovered_dict = json_to_dict(json_str)
print(f"原始字典: {complex_dict}")
print(f"JSON字符串: {json_str}")
print(f"恢复后的字典: {recovered_dict}")