使用json.dumps时JSON文件无法格式化输出及不可序列化字典转字符串写入问题
解决JSON格式化输出失效的问题
嘿,我看你遇到JSON格式化的问题了——其实核心问题出在你构建数据的方式上,咱们一步步来捋清楚:
你的代码问题分析
你现在是把所有数据库和集合的信息拼接成了一个长字符串,然后用json.dumps()去序列化这个字符串。但JSON里的字符串本身就是单行的,哪怕你加了indent=4,也只会格式化JSON的顶层结构(这里顶层就是一个字符串),自然看不到你想要的分行缩进效果。而且你后面的json.loads(data)再返回,其实是把序列化后的JSON字符串又转成了普通字符串,完全没必要。
修复方案:用结构化数据替代字符串拼接
你应该把数据组织成JSON支持的结构(比如列表+字典),这样json.dumps()的indent参数才能生效,输出漂亮的格式化JSON。
修改后的代码如下:
data = [] # 初始化一个列表,用来存储结构化数据 for db_name in client.list_database_names(): db = client[db_name] for coll_name in db.list_collection_names(): # 把每个数据库-集合对存成字典,添加到列表里 data.append({ "database_name": db_name, "collection_name": coll_name }) # 序列化结构化数据,用indent=4实现格式化 formatted_json = json.dumps(data, indent=4) return formatted_json
为什么这样能行?
- 现在
data是一个包含多个字典的列表,属于JSON可直接序列化的结构 json.dumps(data, indent=4)会把这个列表和里面的字典都按缩进格式输出,每个数据库-集合对都会单独成行,结构清晰- 不需要
default=str,因为所有数据都是字符串类型,天然可序列化
这样你写入JSON文件后,打开就能看到整齐的格式化效果啦~
内容的提问来源于stack exchange,提问作者ahjfoışsjhofeşsfn
相关产品推荐
相关产品推荐

