前面几篇博文分别讲述了 JSON 的 概要知识、简单数据获取、封装cssSelector数据获取方法、JSONObject 是否包含 key_value,请自行阅读相关博文。
在日常的接口测试脚本编写过程中,经常需要依据有个特定的条件,获取条件匹配数据对应的其他属性的值。例如,在验证订单信息的接口测试脚本中,我们首先需要获取订单列表,然后通过订单编号找到对应的订单,再获取订单对应的支付金额、配送信息等数据;当然,也可直接获取订单信息,然后获取相应的数据。此文主要讲述第一种情况,当请求响应中含有多个相似的数据信息列表时,若何获取满足特定 key_value 的 JSONObject 并获取相应的 key 对应的 value。
直接上源码:
/**
* Aaron.ffp Inc.
* Copyright (c) 2004-2015 All Rights Reserved.
*/
package com.demo; import java.io.IOException; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.helper.StringUtil;
import org.jsoup.nodes.Document;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import org.testng.log4testng.Logger; /**
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.demo ITestHome.java, 2015-8-31 19:03:15 Exp $
*/
public class ITestHome {
private String request = "http://mb.51buy.com/json.php?mod=home&act=config";
private Logger logger = Logger.getLogger(this.getClass());
private String message = "";
private Document doc;
private String test; /**
* send request and get response
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.demo ITestHome.java beforeTest, 2015-8-31 19:04:05 Exp $
*
* @throws IOException
*/
@BeforeTest
public void beforeTest() throws IOException{
this.doc = Jsoup.connect(this.request).data("appSource","android")
.userAgent("Jsoup demo")
.cookie("user", "Jsoup")
.timeout(5000).get();
this.test = doc.select("body").get(0).text();
} /**
*
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.demo ITestHome.java test_getJSONObjectItemTextUseKV, 2015-9-3 21:31:45 Exp $
*
*/
@Test
public void test_getJSONObjectItemTextUseKV(){
JSONObject jo = new JSONObject(this.getJsonText(this.test, "$data|#floor|$1|#colmunInfo|$0"));
String key_value = "title:星星";
String key = "picUrl"; if (this.isJSONObjectContainKV(jo, key_value)) {
this.message = key_value + " --> " + this.getJSONObjectItemTextUseKV(jo, key_value, key) + "\n"; System.out.println(this.message);
} else {
this.message = "{" + key_value + "} not macth the JSONObject " + jo.toString() + "\n"; System.out.println(this.message);
} key_value = "title:范丰平 - 博客园";
if (this.isJSONObjectContainKV(jo, key_value)) {
this.message = key_value + " --> " + this.getJSONObjectItemTextUseKV(jo, key_value, key) + "\n"; System.out.println(this.message);
} else {
this.message = "{" + key_value + "} not macth the JSONObject " + jo.toString() + "\n"; System.out.println(this.message);
} key_value = "范丰平:博客园";
if (this.isJSONObjectContainKV(jo, key_value)) {
this.message = key_value + " --> " + this.getJSONObjectItemTextUseKV(jo, key_value, key) + "\n"; System.out.println(this.message);
} else {
this.message = "{" + key_value + "} not macth the JSONObject " + jo.toString() + "\n"; System.out.println(this.message);
} key_value = "title:相机九月发券";
if (this.isJSONObjectContainKV(jo, key_value)) {
this.message = key_value + " --> " + this.getJSONObjectItemTextUseKV(jo, key_value, key) + "\n"; System.out.println(this.message);
} else {
this.message = "{" + key_value + "} not macth the JSONObject " + jo.toString() + "\n"; System.out.println(this.message);
}
} /**
* Get the text from JSONObject which the key_value was included.
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.demo ITestHome.java getJSONObjectItemTextUseKV, 2015-9-3 20:24:31 Exp $
*
* @param jsonObject : JSONObject
* @param key_value : key and value
* @param key : key
*
* @return String
*/
public String getJSONObjectItemTextUseKV(JSONObject jsonObject, String key_value, String key){
if (jsonObject == null) {
return "";
} if (StringUtil.isBlank(key_value) || StringUtil.isBlank(key)) {
this.message = "The argument {" + key_value + "} must be not null and empty, please check this!";
logger.error(this.message); new IllegalArgumentException(this.message);
} if (!"2".equals(String.valueOf(key_value.split(":").length)) || StringUtil.isBlank(key_value.split(":")[0]) || StringUtil.isBlank(key_value.split(":")[1])) {
this.message = "The argument {" + key_value + "} is invalid, please check this!";
logger.error(this.message); new IllegalArgumentException(this.message);
} if (this.isJSONObjectContainKV(jsonObject, key_value)) {
return jsonObject.get(key).toString();
} else {
this.message = "Can't find the " + key_value + "in the JSONObject {" + jsonObject.toString() + "}. Please check this!";
this.logger.warn(this.message); System.out.println(this.message);
return "";
}
} /**
* Assert the key-value exist or not in the JSONObject
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.demo ITestHome.java isJSONObjectContainKV, 2015-9-2 20:05:18 Exp $
*
* @param jsonObject : JSONObject
* @param kv : key:value
*
* @return boolean
*/
public boolean isJSONObjectContainKV(JSONObject jsonObject, String key_value){
boolean flag = false;
String actValue = ""; String key = key_value.split(":")[0];
String expValue = key_value.split(":")[1]; try{
if (jsonObject == null) {
throw new NullPointerException("The first argument {" + jsonObject + "} is null, please check this!");
} // assert key_value : null, empty, whitespace
if (StringUtil.isBlank(key_value) || !"2".equals(String.valueOf(key_value.split(":").length)) ||
StringUtil.isBlank(key) || StringUtil.isBlank(expValue)) {
this.message = "The second argument {" + key_value + "} is invalid, please check this!";
this.logger.warn(this.message); throw new IllegalArgumentException(this.message);
} if (this.isJSONObjectContainKey(jsonObject, key)) {
actValue = jsonObject.get(key).toString(); // assert the actual value is expected or not
if (expValue.equals(actValue)) {
flag = true;
}
} else {
this.message = "The key {" + key + "} not exist, please check this.";
this.logger.warn(this.message);
}
} catch (JSONException je){
this.message = je.getMessage();
this.logger.error(this.message); return flag;
} return flag;
} /**
* Assert key is included in JSONObject or not.
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.demo ITestHome.java isJSONObjectContainKey, 2015-9-3 20:51:21 Exp $
*
* @param jsonObject : JSONObject
* @param key : key
*
* @return boolean
*/
public boolean isJSONObjectContainKey(JSONObject jsonObject, String key){
boolean flag = false; try {
if (jsonObject == null) {
throw new NullPointerException("The first argument {" + jsonObject + "} is null, please check this!");
} // assert key_value : null, empty, whitespace
if (StringUtil.isBlank(key)) {
this.message = "The second argument {" + key + "} is invalid, please check this!";
this.logger.warn(this.message); throw new IllegalArgumentException(this.message);
} jsonObject.get(key); flag = true;
} catch (Exception e) {
this.message = e.getMessage();
this.logger.error(this.message);
} return flag;
} /**
* Get JSON Object {JSONObject, JSONArray, text} by json selector
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.demo ITestHome.java getJsonText, 2015-9-1 19:40:12 Exp $
*
* @param json : JSON string
* @param selector : JSON selector
* $key|$key|#array|#int|$int|key
* #key|#int
* $key|#key|$int
* key
*
* array|key : is illegal
* key|$ : is illegal
* key|# : is illegal
* key|key : is illegal
* @return
*/
public String getJsonText(String json, String selector){
JSONObject jo = null;
JSONArray ja = null;
String jsonText = "";
String item = "";
String flag = "O"; // O - JSONObject; A - JSONArray; T - text // arguments must not be null
if (json == null || selector == null) {
this.message = "The argument {" + json + "} and {" + selector + "} must be not null, please check this!";
this.logger.error(this.message); new IllegalArgumentException(this.message);
} // return empty if the json is empty
if ("".equals(json)) {
return "";
} // return json if the selector is empty
if ("".equals(selector)) {
return json;
} try{
jo = new JSONObject(json); String[] select = selector.split("\\|"); for (int i = 0; i < select.length; i++) {
item = select[i]; // throw exception when selector against the rule
if (flag.equals("T") || (flag.equals("A") && (!item.startsWith("O") || !item.startsWith("A") || !StringUtil.isNumeric(item.substring(1))))) {
new IllegalArgumentException("The argument {" + selector + "} is invalid to the define rule of selector, please check this!");
} if (item.startsWith("#")) { // get JSONArray
if (flag.equals("A")) {
ja = ja.getJSONArray(Integer.valueOf(item.substring(1)));
} else if (flag.equals("O")){
ja = jo.getJSONArray(item.substring(1));
} flag = "A";
} else if (item.startsWith("$")){ // get JSONObject
if (flag.equals("O")) {
jo = jo.getJSONObject(item.substring(1));
} else if (flag.equals("A")){
jo = ja.getJSONObject(Integer.valueOf(item.substring(1)));
} flag = "O";
} else { // get text
jsonText = jo.get(item).toString(); flag = "T";
}
}
} catch (JSONException jsone){
jsone.printStackTrace();
} switch (flag) {
case "O":
return jo.toString();
case "A":
return ja.toString();
default:
return jsonText;
}
}
}
执行结果如下图所示:
aaarticlea/png;base64,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" alt="" width="745" height="325" />
至此, Java学习-031-JSON 之五 -- 特定数据获取(JSONObject满足特定键值) 顺利完结,希望此文能够给初学 JSON 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^