某些API是使用非json字符串回复的,那么如何从响应中读取值数据?
响应格式:
onSuccess响应:
状态=成功:订单= a089f02724ed4a8db6c069f6d30b3245:txnId =无:paymentId = MOJO7918005A76494611:标记= qyFwLidQ0aBNNWlsmwHx1gHFhlt6A1
我需要阅读orderID
和txnid
这不是JSON。
我尝试过分裂:但它不适合工作。
String message = "status=" + status + ":orderId=" + orderID + ":txnId="
+ transactionID + ":paymentId=" + paymentID + ":token="
+ Instamojo.this.accessToken;
像这样创建的字符串响应。
答案 0 :(得分:2)
有一种很酷的方法,可以使用以下代码片段将Instamojo字符串响应转换为json响应!
public void onInstaSuccess(String strResponse) {
String strWithoutColon = strResponse.replace(":", "\",\"");
String strWithoutEquals = strWithoutColon.replace("=", "\":\"");
String perfectJSON = "{\"" + strWithoutEquals + "\"}";
Log.i("Perfect", perfectJSON);
// COnvert the json to POJO
InstaMojoModel instaMojoModel = new Gson().fromJson(perfectJSON, InstaMojoModel.class);
}
这是Instamojo课
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class InstaMojoModel {
@SerializedName("status")
@Expose
private String status;
@SerializedName("orderId")
@Expose
private String orderId;
@SerializedName("txnId")
@Expose
private String txnId;
@SerializedName("paymentId")
@Expose
private String paymentId;
@SerializedName("token")
@Expose
private String token;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getTxnId() {
return txnId;
}
public void setTxnId(String txnId) {
this.txnId = txnId;
}
public String getPaymentId() {
return paymentId;
}
public void setPaymentId(String paymentId) {
this.paymentId = paymentId;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
答案 1 :(得分:0)
您可以使用String.split()分隔回复的每个部分。然后使用String.startWith()查找以orderID开头的部分。最后通过使用String.substring()获取包含值的子字符串来获取值。使用String.lastIndexOf()获取=
符号的索引。
这应该是这样的:
String response = getResponse(); //Don't know how you obtain it but its for the example
String[] array = response.split(':');
String orderIdPart;
for(int i=0; i<array.length(); i++){
if(array[i].startWith("orderId")){
orderIdPart = array[i];
break;
}
}
int index = orderIdPart.lastIndexOf('=');
String value = orderIdPart.substring(index);
编辑:
如果你想避免循环,你可以使用它(但它应该总是后跟txnID):
int begginingIndex = response.indexOf("orderId=") + "orderId=".length();
int endIndex = response.indexOf(":txnId");
String value = response.substring(begginingIndex, endIndex);