import json
import math


def replace_special_floats(obj):
    """
    递归地替换字典和列表中的特殊浮点数（inf, -inf, nan）为字符串表示。
    """
    if isinstance(obj, dict):
        return {k: replace_special_floats(v) for k, v in obj.items()}
    elif isinstance(obj, list):
        return [replace_special_floats(item) for item in obj]
    elif isinstance(obj, float) and (math.isinf(obj) or math.isnan(obj)):
        if math.isinf(obj):
            return "Inf" if obj > 0 else "-Inf"
        else:
            return "NaN"
    else:
        return obj


# 示例字典
data = {
    "value1": float('inf'),
    "value2": -float('inf'),
    "value3": float('nan'),
    "nested": {
        "value4": float('inf')
    },
    "list": [float('inf'), float('nan')]
}

# 替换特殊浮点数
clean_data = replace_special_floats(data)

# 转换为JSON字符串
json_str = json.dumps(clean_data, indent=4)

print(json_str)
