如何读取非JSON格式API字符串响应并提取orderId与txnId
解决非JSON响应中提取orderId和txnId的问题
嘿,我来帮你搞定这个提取orderId和txnId的问题!你之前用冒号分割失效,主要是因为响应字符串开头有额外的前缀onSuccess Response: ,而且实际的键值对是key=value的形式,直接按冒号拆分的话,第一个元素是无用的前缀,剩下的每个元素都是完整的键值对,需要进一步处理。
这里给你两种实用的解决方案:
方法一:分步拆分法(直观易懂)
这种方法先剥离前缀,再拆分键值对,最后筛选目标字段,适合需要提取多个字段的场景:
String response = "onSuccess Response: status=success:orderId=a089f02724ed4a8db6c069f6d30b3245:txnId=None:paymentId=MOJO7918005A76494611:token=qyFwLidQ0aBNNWlsmwHx1gHFhlt6A1"; // 1. 移除开头的前缀,只保留键值对部分 String keyValueSection = response.replace("onSuccess Response: ", ""); // 2. 用冒号分割成单个的key=value条目 String[] keyValuePairs = keyValueSection.split(":"); String orderId = null; String txnId = null; // 3. 遍历每个条目,拆分键和值,提取目标字段 for (String pair : keyValuePairs) { String[] parts = pair.split("="); // 确保拆分后有键和值两部分 if (parts.length == 2) { String key = parts[0]; String value = parts[1]; switch (key) { case "orderId": orderId = value; break; case "txnId": txnId = value; break; // 如果需要其他字段,可以继续添加case } } } // 输出结果 System.out.println("提取到的orderId: " + orderId); System.out.println("提取到的txnId: " + txnId);
方法二:正则表达式法(简洁高效)
如果只需要提取orderId和txnId这两个字段,用正则表达式会更简洁,不需要处理前缀和拆分整个字符串:
import java.util.regex.Matcher; import java.util.regex.Pattern; String response = "onSuccess Response: status=success:orderId=a089f02724ed4a8db6c069f6d30b3245:txnId=None:paymentId=MOJO7918005A76494611:token=qyFwLidQ0aBNNWlsmwHx1gHFhlt6A1"; // 匹配orderId的值:匹配"orderId="后面直到下一个冒号的内容 Pattern orderIdPattern = Pattern.compile("orderId=([^:]*)"); Matcher orderIdMatcher = orderIdPattern.matcher(response); String orderId = orderIdMatcher.find() ? orderIdMatcher.group(1) : null; // 匹配txnId的值 Pattern txnIdPattern = Pattern.compile("txnId=([^:]*)"); Matcher txnIdMatcher = txnIdPattern.matcher(response); String txnId = txnIdMatcher.find() ? txnIdMatcher.group(1) : null; // 输出结果 System.out.println("提取到的orderId: " + orderId); System.out.println("提取到的txnId: " + txnId);
两种方法都能完美解决你的问题,你可以根据自己的需求选择:如果要提取多个字段,选分步拆分法;如果只需要这两个字段,正则法更省事。
内容的提问来源于stack exchange,提问作者Jigar Patel
相关产品推荐
相关产品推荐

