追加JSON数据时格式异常,非标准JSON能否转回User类对象?
非标准JSON格式的读取与规范写法
核心问题解答
- 你提到的那种多个对象直接拼接的非标准JSON格式可以转回User类对象,但无法直接用Python标准
json库解析,需要手动做格式拆分处理。 - 更推荐使用你期望的标准数组格式:这是JSON的规范结构,标准库直接支持读写,代码更简洁,也能避免后续出现各种格式兼容问题。
如何读取非标准拼接格式的文件并转回User对象
因为这种格式不符合JSON语法规范,json.load()会直接报错,需要手动拆分每个对象:
import json class User: def __init__(self, name, level, user_id): self.Name = name self.Level = level self.ID = user_id # 读取非标准JSON文件内容 with open('UserList.json', 'r', encoding='utf-8') as fp: raw_content = fp.read().strip() # 拆分多个连续的对象 split_content = raw_content.replace('}{', '}\n{').split('\n') # 逐个解析并转换为User对象 user_list = [] for obj_str in split_content: if obj_str: user_dict = json.loads(obj_str) user = User( name=user_dict['name'], level=user_dict['level'], user_id=user_dict['id'] ) user_list.append(user)
如何写入标准数组格式的JSON文件(避免格式问题)
正确的做法是维护一个数组,每次写入前先读取已有数据,添加新对象后再整体写入:
import json class User: def __init__(self, name, level, user_id): self.Name = name self.Level = level self.ID = user_id # 示例:创建一个新的User对象 new_user = User("Moustafa", "normal_user", "1") user_dict = { 'name': new_user.Name, 'level': new_user.Level, 'id': new_user.ID } # 读取已有数据,文件不存在则初始化空数组 try: with open('UserList.json', 'r', encoding='utf-8') as fp: existing_users = json.load(fp) except FileNotFoundError: existing_users = [] # 添加新用户数据 existing_users.append(user_dict) # 写入标准数组格式的JSON文件 with open('UserList.json', 'w', encoding='utf-8') as fp: json.dump(existing_users, fp, indent=2)
内容的提问来源于stack exchange,提问作者Moustafa Abouamer
相关产品推荐
相关产品推荐

