You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

追加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:25:36