这里我需要你的帮助,因为我的要求是有一个名为transactionReferenceNumber
的属性的值,它位于JSON路径Request.eventDetails.message
部分。
当然,由于对JSON路径遍历知之甚少,我能够使用JSONObject
遍历Request.eventDetails.message
直到Request.eventDetails.message
,如下面的代码片段所示,但无法遍历message
部分并获取或更改transactionReferenceNumber
属性或任何其他属性的值。
String filepath = System.getProperty("user.dir") +
"/src/test/resources/Json_Files/Payment_Events_Api_PayLoad.json";
String jsonContents = new String((Files.readAllBytes(Paths.get(filepath))));
JSONObject jsonObject = new JSONObject(jsonContents);
String Message = jsonObject.getJSONObject("request")
.getJSONObject("eventDetails")
.get("message")
.toString();
下面是JSON供大家参考:
{
"metadata": {
"requestId": "e1d0db1f-ac7d-4011-b34e-c063b6d638a6",
"signature": "ZwcQa6YozllV1mLWPrZFiacSguRoEibSgmb97UvTrWgvuY5I76eWuAg==",
"signatureAlgorithm": "SH443222wesd"
},
"request": {
"eventId": "e43e2222-2c91-47d8-8c03-9a5f52db15a2",
"eventCode": "EADFE",
"eventCategory": "PAYMENT_STATUS",
"eventType": "TRANSACTION_STATUS",
"eventDetails": {
"paymentProduct": "CXC",
"message": "{ \"achCompanyId\": \"3131231\", \"companyName\": \"ABC Company\", \"transactionReferenceNumber\": \"4333\", \"remittanceInfo\": \"Paroll Processing\", \"processingDate\": \"2022-01-12\", \"payeeFirstname\": \"John\", \"payeeIDType\": \"email\", \"payeeEmail\": \"abc.Doe@gmail.com\", \"payeeMobile\": \"\", \"paymentType\": \"STANDARD\", \"paymentAmount($)\": 600.50, \"numberOfHoldDays\": 5, \"currentPaymentStatus\": \"PENDING\"}",
"messageFormat": "CUSTOM.CXC.JSON"
},
"timeStamp": "2020-07-21T14:53:54-0400"
}
}
请大家在这个问题上帮助我,并提出解决这个问题的可能方法。
先谢谢你了。
1条答案
按热度按时间ssgvzors1#
JSON中的“message”值是一个包含另一个JSON对象的字符串,而不是直接的JSON对象,这意味着您不能使用
getJSONObject()
或类似的方法直接遍历它。你需要做的是将“message”解析为一个单独的JSON对象,只有这样你才能修改它的值: