AWS Lambda调用报错「键后预期有冒号」,字符串转JSONObject失败求助
问题原因排查
- 第一类语法错误:你给出的Java代码本身存在两处基础语法问题:
- Java不支持
Object input = { "bucketName": "status", ... }这种直接用JSON结构大括号给普通Object对象赋值的写法,该代码无法通过编译。即使你是从Lambda运行时上下文获取的input对象,直接调用toString()得到的也不是合法JSON字符串,而是Java对象默认的类名@哈希值格式的字符串,完全不符合JSON规范,解析时自然会在对应位置找不到预期的冒号,触发报错。 - 方法调用书写错误:
input.toString没有加方法调用的括号,正确写法应为input.toString(),该写法本身也属于Java非法语法,无法正常获取对象的字符串输出。
- Java不支持
- 第二类逻辑错误:AWS Lambda Java运行时会自动将传入的JSON请求反序列化为对应入参类型的对象,直接对该对象调用
toString()无法得到原始的JSON字符串,属于入参处理逻辑错误。
修复方案
如果你需要将入参转为JSONObject,可参考两种正确实现方式:
- 直接将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; } }
- 如果已经使用自定义类接收入参,可通过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
相关产品推荐
相关产品推荐

