前面几篇博文分别讲述了 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 的您一份参考。

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

Java学习-031-JSON 之五 -- 特定数据获取(JSONObject满足特定键值)的更多相关文章

  1. Java学习-030-JSON 之四 -- 判断 JSONObject 是否包含键值对

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

  2. JAVA整合Redis使用redisTemplate清除库中的所有键值对数据

    JAVA整合Redis使用redisTemplate清除库中的所有键值对数据,清除所有缓存数据 Set<String> keys = redisTemplate.keys("*& ...

  3. java学习之JSON

    0X00前言 JSON可以说是javascript的一种数据类型,我们学习JSON是为了在客户端的数据给读取出来,官方的解释是:概述:JSON(JavaScript Object Notation, ...

  4. Android(java)学习笔记105:Map集合的遍历之键值对对象找键和值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  5. Android(java)学习笔记44:Map集合的遍历之键值对对象找键和值

    1. Map集合的遍历之 键值对对象找 键和值: package cn.itcast_01; import java.util.HashMap; import java.util.Map; impor ...

  6. JSONObject遍历获取键值方法合并两个JSONObject

    JSONObject obj1= new JSONObject(); try { obj1.put("obj1_data", obj1_data); if (null != obj ...

  7. IOS开发---菜鸟学习之路--(二十三)-直接利用键值对的方式来处理数据的感想

    首先声明,本文纯粹只是做为本人个人新手的理解.文中的想法我知道肯定有很多地方是错的. 但是这就是我作为一个新人的使用方法,对于大牛非常欢迎指导,对于喷子请绕道而行. 由于这是早上跟我学长讨论数据处理时 ...

  8. Java学习笔记-Json

    //先导入gson到lib,add build path //2015年5月5日22:02:37 package com.alfredsun.thread; import com.google.gso ...

  9. Java学习笔记——设计模式之五.工厂方法

    水边一只青蛙在笑 --石头和水 工厂方法模式(Factory Method),定义了一个用于创建对象的接口,让实现类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 这里在简单和工厂的基础上 ...

  10. ObjectMapper用于将java对象转换为json格式数据以及JSONObject对象解析json格式数据

    ObjectMapper objectMapper = new ObjectMapper(); //反序列化的时候如果多了其他属性,不抛出异常 objectMapper.configure(Deser ...

随机推荐

  1. 《为ipad而设计 打造畅销APP》读书笔记

    (1)应用应该对用户程序持ipad的变化做出响应 (2)要设计出确实出色的触摸屏交互界面需要能够触摸到自己的设计,反复触摸,直到找到感觉 (3)chipmunk physics 2D的物理图形库 (4 ...

  2. 提升 web 应用程序的性能(一)

       提升 web 应用程序的性能,找出瓶颈,加快客户端内容的速度.    作为 web 用户,我们知道页面加载或刷新的速度对其成功至关重要.本文将帮助您更好地理解影响 web 应用程序性能的因素.学 ...

  3. jquery easyui datagrid 分页详解

    由于项目原因,用了jquery easyui 感觉界面不错,皮肤样式少点,可是官网最近打不开了,资料比较少,给的demo没有想要的效果,今天在用datagrid 做分页显示的时候,折腾了半天,网上的资 ...

  4. Qt resizeEvent 控件居中设置

    在Qt中我们有时需要让一个控件在窗口居中或是在父控件中居中,而且在窗口拉伸时仍然保持正中央的位置.这里介绍一种方法,用到了主窗口的响应函数resizeEvent(QResizeEvent* event ...

  5. ubuntu 14.04安装

    最近想搞spark.没有集群环境,想先在单机上跑.但是两年前一直用到现在的virtualbox已经太老,很多源都停更了.所以准备装ubuntu14.04. 0. 更新源.163的源有问题,用的是soh ...

  6. Powershell连接Office 365各组件的方法

    参考: http://www.exchangecn.com/office365/20150108_540.html 1. 适用于 IT 专业人员 RTW 的 Microsoft Online Serv ...

  7. RAID 容量计算器

    https://www.synology.com/zh-cn/support/RAID_calculator   磁盘阵列比较表   n/2 n/2 n n/2 安全性高 综合RAID 0/1优点,理 ...

  8. P4factory 运行结果展示 basic_routing 以及 ./run_all_tests 的运行结果

    p4factory子目录下的run_all_tests 安装好p4factory之后,打算跑一下样例来测试是否正确. 但是,跑了targets目录内的basic_routing,make又报错了,但之 ...

  9. 使用 PHP 限制下载速度

    使用 PHP 限制下载速度 [来源] 达内    [编辑] 达内   [时间]2012-12-12 经常遇到一个问题,那就是有人再办公室下载东西,影响大家上网.办公.同样的问题,要是出现在了服务器上面 ...

  10. 开放平台鉴权以及OAuth2.0介绍

    OAuth 2.0 协议 OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容. OAuth 2.0 ...