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
相关产品推荐
相关产品推荐

