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

Java中如何从返回的JSON对象中提取originationNumber与messageBody值

解决方法

实现思路

  • 首先引入JSON解析库(这里推荐使用Java生态常用的Jackson,也可以根据项目现有依赖选择Fastjson等其他库)
  • 你代码中sb.toString()输出的就是完整的JSON字符串,直接解析该字符串即可提取originationNumber和messageBody字段
  • 提取到字段值后赋值给receivedMessage对应属性即可

具体实现步骤

步骤1:引入Jackson依赖(如果项目未引入)

Maven的pom.xml添加:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 可替换为项目适配的版本 -->
</dependency>

步骤2:修改原有代码

首先建议把ObjectMapper声明为类的静态全局成员,避免重复实例化:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

// 类内部声明全局ObjectMapper
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

然后修改你原有方法的逻辑,解析JSON并赋值:

public String getReceivedMessages(Messaging receivedMessage) {

    BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
    AmazonSQS sqsClient = AmazonSQSClientBuilder.standard()
            .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
            .withRegion(String.valueOf(awsRegion)).build();

    StringBuilder sb = new StringBuilder();
    String queueUrl = "https://sqs.us-east-1.amazonaws.com/1234567/GetReceivedMessages";
    List<Message> messages = sqsClient.receiveMessage(new ReceiveMessageRequest(queueUrl)
            .withMaxNumberOfMessages(1).withWaitTimeSeconds(20)).getMessages();
    for (Message message : messages) {
        sb.append(message.getBody());
        sqsClient.deleteMessage(queueUrl, message.getReceiptHandle());
    }

    // Save messages to DB
    String userId = connectionRequestRepository.getUserId();
    Date date = new Date();
    Timestamp now = new Timestamp(date.getTime());

    // 新增JSON解析逻辑
    String originationNumber = "";
    String messageBody = "";
    String jsonContent = sb.toString();
    if (!jsonContent.isBlank()) {
        try {
            JsonNode jsonNode = OBJECT_MAPPER.readTree(jsonContent);
            // 先判断字段是否存在,避免空指针异常
            if (jsonNode.has("originationNumber")) {
                originationNumber = jsonNode.get("originationNumber").asText();
            }
            if (jsonNode.has("messageBody")) {
                messageBody = jsonNode.get("messageBody").asText();
            }
        } catch (JsonProcessingException e) {
            // 可根据业务需要添加异常处理逻辑,比如日志打印、报错告警等
            e.printStackTrace();
        }
    }

    receivedMessage.setUserId(userId);
    receivedMessage.setOriginationNumber(originationNumber);
    receivedMessage.setDestinationNumber("***");
    receivedMessage.setMessageBody(messageBody);
    receivedMessage.setMessageType("RECEIVED");
    receivedMessage.setCreatedAt(now);
    messagingRepository.save(receivedMessage);

    System.out.println(sb);
    return sb.toString();
}

补充说明

  • 如果你项目已经引入Fastjson作为JSON解析工具,对应解析逻辑可以替换为:
import com.alibaba.fastjson.JSONObject;

// 解析部分替换为
JSONObject jsonObject = JSONObject.parseObject(jsonContent);
String originationNumber = jsonObject.getString("originationNumber");
String messageBody = jsonObject.getString("messageBody");
  • 你代码中配置了withMaxNumberOfMessages(1),每次最多拉取1条消息,不需要用StringBuilder拼接,直接取第一条消息的body即可,可简化相关逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:54:03