前文对获取 JSON 数据封装方法,使之可通过类似于 cssSelector 的方法获取 JSON 数据,使获取数据变得简单。敬请参阅:模仿 cssSelector 封装读取 JSON 数据方法

在日常的测试中,需要验证 JSON 数据中某一个值是否正确,再次封装一个方法,验证 JSONObject 中是否包含特定的键值。

直接上码了:

/**
* 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_isJSONObjectContainKV, 2015-9-2 20:24:56 Exp $
*
* @throws IOException
*/
@Test
public void test_isJSONObjectContainKV() throws IOException {
System.out.println("\n\n==================================== test_isJSONObjectContainKV"); System.out.println("errno --> " + this.isJSONObjectContainKV(new JSONObject(this.test), "errno:0"));
System.out.println("title:星星 --> " + this.isJSONObjectContainKV(new JSONObject(this.getJsonText(this.test, "$data|#floor|$1|#colmunInfo|$0")), "title:星星"));
} /**
* 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; try{
if (jsonObject == null) {
new NullPointerException("The argument {" + jsonObject + "} is null, please check this!"); return flag;
} // assert key_value : null, empty, whitespace
if (StringUtil.isBlank(key_value) || !"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!";
this.logger.warn(this.message); return flag;
} String act = jsonObject.get(key_value.split(":")[0]).toString();
String exp = key_value.split(":")[1]; // assert the actual value is expected or not
if (exp.equals(act)) {
flag = true;
}
} catch (JSONException je){
this.message = je.getMessage();
this.logger.error(this.message); return flag;
} 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="" />

各位也可修改上述源码中的第 98 行,以满足不同方式的对比判断,例如:相等、包含、起始、结尾等。

至此, Java学习-030-JSON 之四 -- 判断 JSONObject 是否包含键值对 顺利完结,希望此文能够给初学 Java 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

04-07 18:44
查看更多