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

AWS Lambda调用报错「键后预期有冒号」,字符串转JSONObject失败求助

问题原因排查
  • 第一类语法错误:你给出的Java代码本身存在两处基础语法问题:
    1. Java不支持Object input = { "bucketName": "status", ... } 这种直接用JSON结构大括号给普通Object对象赋值的写法,该代码无法通过编译。即使你是从Lambda运行时上下文获取的input对象,直接调用toString()得到的也不是合法JSON字符串,而是Java对象默认的类名@哈希值格式的字符串,完全不符合JSON规范,解析时自然会在对应位置找不到预期的冒号,触发报错。
    2. 方法调用书写错误:input.toString没有加方法调用的括号,正确写法应为input.toString(),该写法本身也属于Java非法语法,无法正常获取对象的字符串输出。
  • 第二类逻辑错误:AWS Lambda Java运行时会自动将传入的JSON请求反序列化为对应入参类型的对象,直接对该对象调用toString()无法得到原始的JSON字符串,属于入参处理逻辑错误。

修复方案

如果你需要将入参转为JSONObject,可参考两种正确实现方式:

  1. 直接将Lambda入参类型定义为String,拿到原始JSON字符串后再转换:
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import org.json.JSONObject;

public class FtpProcessHandler implements RequestHandler<String, Object> {
    @Override
    public Object handleRequest(String rawJsonInput, Context context) {
        JSONObject obj = new JSONObject(rawJsonInput);
        // 后续业务逻辑
        return null;
    }
}
  1. 如果已经使用自定义类接收入参,可通过Jackson序列化工具将对象转为JSON字符串后再构造JSONObject:
import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.JSONObject;

// 假设customInput为你已经反序列化完成的自定义入参对象
ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = objectMapper.writeValueAsString(customInput);
JSONObject obj = new JSONObject(jsonStr);

内容的提问来源于stack exchange,提问作者Shihan_shk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:39:03