【发布时间】:2019-09-07 09:28:16
【问题描述】:
我收到一条类似于下文所述的消息。 这只是来自服务器的示例消息。原始消息可能包含许多特殊字符。如何从消息中选择准确的 json 部分,因为我们都知道 json 部分带有大括号 {}。 Java中有没有可以解析原始消息格式并输出json对象的json解析器。到目前为止,我看到的 json 解析器很少,但我们必须提供准确的 json 字符串来解析。
"hdr_Tran_Id={CARDBALANCE}~*hdr_Ref_No=1~*{res_Status=00000~}*{\"RESCARDNUMBER\":\"46877801****5006\",\"RESERRMSG\":\"SUCCESS\",\"RESTXNREFCODE\":\"CRDHOTLIST\",\"RESLOCALTXNDTTIME\":\"20190121183606\",\"RESHDRTRANID\":\"CARDSTMTGEN\",\"RESERRCODE\":\"0\",\"RESTXNREFNO\":\"12341234\", \"RESINDICATOR\":\"\"}"
如何选择大括号中的消息部分{}
{\"RESCARDNUMBER\":\"46877801****5006\",\"RESERRMSG\":\"SUCCESS\",\"RESTXNREFCODE\":\"CRDHOTLIST\",\"RESLOCALTXNDTTIME\":\"20190121183606\",\"RESHDRTRANID\":\"CARDSTMTGEN\",\"RESERRCODE\":\"0\",\"RESTXNREFNO\":\"12341234\", \"RESINDICATOR\":\"\"}
因为一条消息可能包含多个大括号,而少数大括号可能不包含 json 消息。
这是给观众的另一个原始字符串样本。
hdr_Tran_Id=LISTOFCARDS~*hdr_Ref_No=1~*res_Status=00000~*{"ResErrMsg":"SUCCESS","ResTxnRefNo":"12341234","ResMobileNumber":"9448925643","ResTxnRefCode":"LISTOFCARDS","ResErrCode":"0","ResHdrTranID":"LISTOFCARDS","ResLocalTxnDtTime":"20190121174837","ResCardNumList":[{"ResMobileNum":"9448925643","ResEmailId":"krishnakumarj@canarabank.com","ResCustName":"KRISHNA KUMAR J","ResCustAddr":"CANARA BANK,CANCARD DIVISION,14, NAVEEN COMPLEX,M G ROAD,BANGALORE,INDIA","ResBirthDate":"02-04-1968","ResCardNumber":"4770360117595007","ResPhoneNum":"25582496"},{"ResMobileNum":"9448925643","ResCustName":"KRISHNA KUMAR J","ResCustAddr":"CANARA BANK,CANCARD DIVISION,VI FLOOR, NAVEEN COMPLEX,M G ROAD,BANGALORE,INDIA","ResBirthDate":"02-04-1968","ResCardNumber":"5298700103122003","ResPhoneNum":"25582896"},{"ResMobileNum":"9448925643","ResEmailId":"krish_jkk7@yahoo.co.in","ResCustName":"KRISHNA KUMAR J","ResCustAddr":"CANARA BANK,NAVEEN COMPLEX,DBS WING ,###,BANGALORE,INDIA","ResBirthDate":"02-04-1968","ResCardNumber":"6082010100018008"},{"ResMobileNum":"9448925643","ResCustName":"KRISHNA KUMAR J","ResCustAddr":"CANARA BANK,EDP SN CANCARD DIVN,14 M G ROAD,NAVEEN COMPLEX,BANGALORE,INDIA","ResBirthDate":"02-04-1968","ResCardNumber":"4687780160098009","ResPhoneNum":"9448925643"}]}
【问题讨论】:
-
您能更好地解释您的问题吗?我觉得我不明白。
-
到目前为止你有什么尝试?
-
@KunLun 我又编辑了帖子,请看一下。
-
一个简短的解决方案可能是
response.substring(response.indexOf("{\""), response.lastIndexOf("\"}")+3);,但如果indexOf或lastIndexOf什么也没找到(return -1),这可能会产生错误。仅当没有另一个以{\"开头并以\"}结尾的子字符串时,此功能才有效。 -
另一种方法是获取所有以
{开头并以}结尾的子字符串,并使用解析器测试它是否是json。如果您收到错误,则表示不是 json。之后,您可以检查 json 中是否存在您要查找的内容。
标签: java json message-queue org.json