問題描述
有這樣的一個json 字串:
{
"msg": null,
"flag": "S",
"code": null,
"data": {
"loanList": [
{
"loanNo": "7708778571",
"loanStateDesc": "還款中",
"loanState": "RP",
"loanAmt": "500.00"
},
{
"loanNo": "7708778572",
"loanStateDesc": "還款中",
"loanState": "RP",
"loanAmt": "500.00"
},
{
"loanNo": "7708778573",
"loanStateDesc": "還款中",
"loanState": "RP",
"loanAmt": "500.00"
},
{
"loanNo": "7702890246",
"loanStateDesc": "已還清",
"loanState": "FP",
"loanAmt": "500.00"
}
]
},
"class": "demo.test.domain.Response"
}
我需要提取出來loanState爲RP的LoanNo,不能簡單的通過json 提取器來獲取,但可以在json 提取器裏使用JsonPath 提取,類似下面寫法;
$.data.loanList[?(@.loanState==“RP”)].loanNo ,其中:[?()] 爲過濾器表達式,結果是boolean類型。
還有另一種方式,通過fastjson來解決,需要下載第三方jar包,在beanshell後置處理器中寫代碼如下:
import com.alibaba.fastjson.*;
//獲取從上一個請求返回的數據
String rspData = prev.getResponseDataAsString();
//把從結果中得到的json數據轉成json對象
JSONObject dataObj = JSONObject.parseObject(rspData);
//因爲 loanList 是在data中,所以還要得到data對象
JSONObject jsonData = dataObj.getJSONObject("data");
//data對象的loanList轉成json 數組
JSONArray loanLists = jsonData.getJSONArray("loanList");
//通過for循環得到數組的中的對象,然後根據屬性得到相應的值
JSONObject loanObject;
String loanNo = null ;
String loanState = null;
String loanAmt= null;
for (int i = 0; i < loanLists.size(); i++) {
loanObject = (JSONObject) loanLists.get(i);
loanState = loanObject.getString("loanState");
if (loanState.equals("RP")) {
loanNo = loanObject.getString("loanNo");
loanAmt = loanObject.getString("loanAmt");
break;
}
}
//log.info("----------------------------------------" + loanNo);
vars.put("RPLoanNo",loanNo);
vars.put("RPLoanAmt",loanAmt);