如何修复AWS S3中追加JSON数据后的格式异常问题
问题原因
你的代码犯了两个核心错误:
- 错误解析S3数据:把从S3读出的JSON字符串用
json.dumps()转成了带转义的JSON格式字符串,而不是用json.loads()解析成Python对象。 - 非法JSON拼接:直接拼接两个独立的JSON字符串会生成无效JSON,而且最后又做了一次
json.dumps(),导致双重转义,出现大量\符号。
正确实现代码
要实现合法的JSON追加,应该把数据组织成JSON数组(这是存储多个对象的标准合法格式),步骤如下:
import boto3 import json s3 = boto3.client('s3') bucket = 'bucket' key = 'key.json' # 准备要追加的本地数据 local_data = {"id": "123", "name": "XYZ", "transaction": [20.0, 30.0]} # 读取S3中的现有JSON并解析为Python对象 resp = s3.get_object(Bucket=bucket, Key=key) existing_data_str = resp['Body'].read().decode('utf-8') existing_data = json.loads(existing_data_str) # 处理现有数据结构:如果是单个对象,转为数组;如果已经是数组则直接使用 if isinstance(existing_data, dict): data_list = [existing_data] else: data_list = existing_data # 追加新数据到数组 data_list.append(local_data) # 转成合法的JSON字符串并写入S3 final_json = json.dumps(data_list, indent=2) s3.put_object(Bucket=bucket, Key=key, Body=final_json.encode('utf-8'))
说明
执行后,S3中的JSON文件会变成标准数组格式,示例如下:
[ { "id": "1", "name": "test1", "limit": [20.0, 30.0] }, { "id": "2", "name": "test2", "limit": [10.0, 20.0] }, { "id": "123", "name": "XYZ", "transaction": [20.0, 30.0] } ]
如果你的业务场景需要其他结构(比如对象嵌套),可以调整数据处理逻辑,但必须保证最终生成的是合法JSON格式。
内容的提问来源于stack exchange,提问作者Bravo
相关产品推荐
相关产品推荐

