我正在接收一個JSON物件,我需要將其值保存到我的資料庫中。但是我遇到了一個問題,那就是如何檢索 JSON 物件中的特定值。
在這種情況下,我想檢索'originationNumber'和'messageBody'的值
。回應物件 -
{"originationNumber": "***","destinationNumber":"***", "messageKeyword": "KEYWORD_***","messageBody":"答案","previousPublishedMessageId": "1slamq6mdpucd8q4i7iabf1sikc629ga253tr6o0","inboundMessageId":"88bc02fc-aff3-4277-ac1d-f27b6d3b6abb"}。
接收訊息的方法 -
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"/span>。
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())。
}
//將訊息保存到DB。
String userId = connectionRequestRepository.getUserId()。
Date date = new Date();
Timestamp now = new Timestamp(date.getTime())。
receivedMessage.setUserId(userId);
receivedMessage.setOriginationNumber(""/span>)。
receivedMessage.setDestinationNumber("***")。
receivedMessage.setMessageBody("")。
receivedMessage.setMessageType("RECEIVED")。
receivedMessage.setCreatedAt(now);
messagingRepository.save(receivedMessage)。
System.out.println(sb); <---列印回應物件到控制臺
return sb.toString()。
}
uj5u.com熱心網友回復:
where ur json like
{"originationNumber":"***",
"destinationNumber":"***",
"messageKeyword"/span>:"KEYWORD_***"。
"messageBody":"Answer", "previousPublishedMessageId":"1slamq6mdpucd8q4i7iabf1sikc629ga253tr6o0",
"inboundMessageId":"88bc02fc-aff3-4277-ac1d-f27b6d3b6abb"。
}
它像
"key"/span>:Value
我想你的代碼會像
一樣receivedMessage.setUserId(userId);
receivedMessage.setOriginationNumber("originationNumber"/span>)。
receivedMessage.setDestinationNumber("destinationNumber")。
receivedMessage.setMessageBody("messageBody")。
receivedMessage.setMessageType("RECEIVED")。
receivedMessage.setCreatedAt(now);
messagingRepository.save(receivedMessage)。
uj5u.com熱心網友回復:
你可以使用jackson庫來實作。
解決方案1:你可以使用ObjectMapper,如下:
訊息類將JSON映射為Java物件:
public class Message {
private String originationNumber;
private String messageBody;
//public getter and setters 方法。
}
從JSON字串創建物件:
Message message = null;
ObjectMapper objectMapper = new ObjectMapper() 。
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)。
try {
message = objectMapper.readValue(payload, Message.class)。
} catch (JsonProcessingException e) {
// Log 或者根據需要做一些動作。
}
在這里message將有這些值。DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES在這里被用來跳過例外,因為在JSON中也有其他欄位,而在Java類中不存在(因為我們不需要它們)。
解決方案2:另外,你可以使用同一Jackson庫中的JsonNode,并按以下方式逐個讀取節點:
ObjectMapper mapper = new ObjectMapper()。
JsonNode actualObj = mapper。 readTree("{"originationNumber": "***", "destinationNumber": "***", "messageKeyword": "KEYWORD_***", "messageBody": "Answer ","previousPublishedMessageId":"1slamq6mdpucd8q4i7iabf1sikc629ga253tr6o0","inboundMessageId":"88bc02fc-aff3-4277-ac1d-f27b6d3b6abb"}");
String originationNumber = actualObj.get("originationNumber") 。
String messageBody = actualObj.get("messageBody") 。
在這種方法中,你不需要創建Message類。
uj5u.com熱心網友回復:
你可以將json字串轉換成一個json物件 https://www.javatpoint.com/how-to-convert-string-to-json-object-in-java
String string = "{" originationNumber": "***","destinationNumber":"***","messageKeyword":"KEYWORD_***","messageBody":"Answer ","previousPublishedMessageId":"1slamq6mdpucd8q4i7iabf1sikc629ga253tr6o0","inboundMessageId":"88bc02fc-aff3-4277-ac1d-f27b6d3b6abb"}";
JSONObject json = new JSONObject(字串)。
System.out.println(json.toString())。
String destinationNumber = json.getString(" destinationNumber")。
System.out.println(destinationNumber)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/307790.html
標籤:
