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

嵌套字典中的 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日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?