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

如何修复AWS S3中追加JSON数据后的格式异常问题

问题原因

你的代码犯了两个核心错误:

  1. 错误解析S3数据:把从S3读出的JSON字符串用json.dumps()转成了带转义的JSON格式字符串,而不是用json.loads()解析成Python对象。
  2. 非法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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:20:28