如何读取字符串响应

时间:2018-03-19 13:27:26

标签: android

某些API是使用非json字符串回复的,那么如何从响应中读取值数据?

响应格式:

onSuccess响应:

  

状态=成功:订单= a089f02724ed4a8db6c069f6d30b3245:txnId =无:paymentId = MOJO7918005A76494611:标记= qyFwLidQ0aBNNWlsmwHx1gHFhlt6A1

我需要阅读orderIDtxnid这不是JSON。

我尝试过分裂:但它不适合工作。

String message = "status=" + status + ":orderId=" + orderID + ":txnId=" 
                 + transactionID + ":paymentId=" + paymentID + ":token=" 
                 + Instamojo.this.accessToken;

像这样创建的字符串响应。

2 个答案:

答案 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);