岭南香雪 2024-08-29 18:31 采纳率: 50%
浏览 11
已结题

嵌套字典中的 list 保存到 json,怎样才能不换行?

我有一个json文件,它保存了一个嵌套的字典。在内层字典中,"Label"这个键对应的值是一个list,现在这个list保存的时候总是换行,我希望这个list保存在同一行,应该怎么做
这是现在的origin.json文件:

{
    "00020_1": {
        "number": 50,
        "CategoryId": 0,
        "Label": [
            1,
            1,
            1,
            0,
            1 
        ]
    },
    "00020_2": {
        "number": 48,
        "CategoryId": 27,
        "Label": [
            1,
            1,
            1,
            0,
            0
        ]
    },
    "00020_3": {
        "number": 48,
        "CategoryId": 22,
        "Label": [
            1,
            0,
            0,
            0,
            0
        ]
    }
}

以下是我希望的格式:

{
    "00020_1": {
        "number": 50,
        "CategoryId": 0,
        "Label": [1, 1, 1, 0, 1]
    },
    "00020_2": {
        "number": 48,
        "CategoryId": 27,
        "Label": [1, 1, 1, 0, 0]
    },
    "00020_3": {
        "number": 48,
        "CategoryId": 22,
        "Label": [1, 0, 0, 0, 0]
    }
}

我是通过json.dump方法并设置indent=4来将data写入origin.json文件的,把indent设置为None也得不到我希望的格式,应该怎么做呢?

with open('origin.json', 'w') as f:
    json.dump(data, f, indent=4)
  • 写回答

1条回答 默认 最新

  • 晴友读钟 2024-08-29 18:50
    关注

    这个脚本可以实现格式化,data是你需要格式化的json文件数据,你可以直接复制过来,也可以用文件操作函数打开你的json文件,输出时同理,可以直接print,也可以用文件操作函数写入到某文件中

    
    import json
    
    
    class SingleLineArrayEncoder(json.JSONEncoder):
        def encode(self, obj):
            result = super().encode(obj)
            result = result.replace('"[', '[').replace(']"', ']').replace('\\', '')
            return result
    
    
    def preprocess_data(data):
        for key, value in data.items():
            if "Label" in value:
                value["Label"] = json.dumps(value["Label"])
        return data
    
    
    # 假设 `data` 是你从原始 JSON 文件中加载的数据
    data = {
        "00020_1": {
            "number": 50,
            "CategoryId": 0,
            "Label": [
                1,
                1,
                1,
                0,
                1
            ]
        },
        "00020_2": {
            "number": 48,
            "CategoryId": 27,
            "Label": [
                1,
                1,
                1,
                0,
                0
            ]
        },
        "00020_3": {
            "number": 48,
            "CategoryId": 22,
            "Label": [
                1,
                0,
                0,
                0,
                0
            ]
        }
    }
    
    # 预处理数据
    processed_data = preprocess_data(data)
    
    # 序列化数据
    serialized_data = json.dumps(
        processed_data, cls=SingleLineArrayEncoder, indent=4)
    
    print(serialized_data)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月6日
  • 已采纳回答 8月29日
  • 创建了问题 8月29日

悬赏问题

  • ¥50 安装华大九天aether
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证