beanshell解析json(从简单到复杂)
使用beanshell 解析单层Json:
Json 数据如下:
{
"status":200,
"code": 0,
"message": "成功",
"data": {
"last": false,
"totalPages": 7,
"numberOfElements": 3,
"first": true,
"totalElements": 64,
"size": 10
}
}
则对于单层Json 则使用beanshell 如此解析:
思路:
1.接收返回值并定义为String 类型
2.将接收到的Sting 转换为JSONObject
3. 调用JSON对象中get()方法获得键值对中的值
1. //先引入Jar包
2. import org.json.*;
3. //获取请求返回值。只能获取到String
4. String response_data=prev.getResponseDataAsString();
5. //将string 类型返回值构造成Jsonobject 对象
6. JSONObject data_obj= new JSONObject(response_data);
7. //获取Json中 first的值
8. String apps_str= data_obj.get("data").get("first").toString();
使用beanshell 解析多层Json:
{
"status":200,
"code":0,
"message":"成功",
"data":{
"last":false,
"totalPages":7,
"numberOfElements":3,
"first":true,
"totalElements":64,
"size":10,
"content":[
{
"patrolJobId":"ff80808160058467016028b15b120cd0",
"pathName":"安管B班12月巡更",
"expectedStartTime":"2017-12-06T13:00:00+0800",
"expectedEndTime":"2017-12-06T19:00:00+0800",
"currentSystemTime":"2017-12-06T16:18:24+0800"
},
{
"patrolJobId":"ff80808160058467016028b15b130cd1",
"pathName":"安管B班12月巡更",
"expectedStartTime":"2017-12-06T19:00:00+0800",
"expectedEndTime":"2017-12-07T01:00:00+0800",
"currentSystemTime":"2017-12-06T16:18:25+0800"
}
]
},
"number":0
}
则对于多层Json 则使用beanshell 如此解析:
思路:
1.接收返回值并定义为String 类型
2.将接收到的Sting 转换为JSONObject
3.获取jsonarrary
4.调用Jsonarray对象中get()方法获得键值对中的值
import org.json.*;
//获取请求返回值。只能获取到String
String response_data=prev.getResponseDataAsString();
JSONObject data_obj= new JSONObject(response_data);
JSONArray apps_array= (JSONArray) ((JSONObject)data_obj.get("data")).get("content");
//获取第一串json 的patrolJobId
String patrolJobId= ((JSONObject)apps_array.get(0)).get("patrolJobId").toString();
使用beanshell 获取Json中所有该键(iBeaconUniqueCode)的值:
{
"status":200,
"code":0,
"message":"成功",
"data":{
"last":false,
"totalPages":7,
"numberOfElements":3,
"first":true,
"totalElements":64,
"size":10,
"content":[{
"patrolJobId":"ff80808160058467016028b15b120cd0",
"pathName":"安管B班12月巡更",
"expectedStartTime":"2017-12-06T13:00:00+0800",
"expectedEndTime":"2017-12-06T19:00:00+0800",
"currentSystemTime":"2017-12-06T16:18:24+0800",
"patrolUnitList":[
{
"signinTime":"2017-12-06T14:37:54+0800",
"unitName":"1座 1楼 3号铺",
"iBeaconUniqueCode": "GY-XC010103",
"signedIn":true
},
{
"unitName":"1座 1楼 8号铺",
"iBeaconUniqueCode": "GY-XC010108",
"signedIn":false
}
]
},
{
"patrolJobId":"ff80808160058467016028b15b130cd1",
"pathName":"安管B班12月巡更",
"expectedStartTime":"2017-12-06T19:00:00+0800",
"expectedEndTime":"2017-12-07T01:00:00+0800",
"currentSystemTime":"2017-12-06T16:18:25+0800",
"patrolUnitList":[
{
"unitName":"1座 1楼 3号铺",
"iBeaconUniqueCode": "GY-XC010103",
"signedIn":false
},
{
"unitName":"1座 1楼 8号铺",
"iBeaconUniqueCode": "GY-XC010108",
"signedIn":false
}
]
}
]
},
"number":0
}
思路:
new一个ArraryList,因为iBeaconUniqueCode存在于2层json 中,所以需要2层循环查找iBeaconUniqueCode,最后使用get()方法获取该值,并添加到ArraryList中
import org.json.*;
//获取请求返回值。只能获取到String
String response_data=prev.getResponseDataAsString();
JSONObject data_obj= new JSONObject(response_data);
JSONArrayapps_array= (JSONArray)((JSONObject)data_obj.get("data")).get("content");
ArrayList list =new ArrayList();
//外层循环获取JsonArrary的每一串Json
for(int j=0;j<apps_array.length();j++){
String apps_str1=apps_array.get(j).get("patrolUnitList").toString();
JSONArray apps_array1= new JSONArray(apps_str1);
for (int i=0;i<apps_array1.length();i++){
//内层循环查找每个Json里的iBeaconUniqueCode值
JSONObject app_obj= new JSONObject(apps_array1.get(i).toString());
String iBeaconUniqueCode1= app_obj.get("iBeaconUniqueCode").toString();
//将iBeaconUniqueCode值添加到ArrayList中
list.add(iBeaconUniqueCode1);
}
}
String[] iBeaconUniqueCode= new String[list.size()];
for(int i=0;i<list.size();i++){
iBeaconUniqueCode[i]=list.get(i);
}
vars.put("iBeaconUniqueCode", Arrays.toString(iBeaconUniqueCode));
---------------------
作者:城市的柏油路太硬
来源:CSDN
原文:https://blog.csdn.net/qq_34309753/article/details/78753307?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
beanshell解析json(从简单到复杂)的更多相关文章
- C# 后台解析json,简单方法 字符串序列化为对象,取值
如果后台是一个JSON的字符串格式如下: string str = "{\"Success\":true,\"Msg\":\"成功!\&qu ...
- Boost property_tree解析json
使用Boost property_tree解析json 之前使用jsoncpp解析json,现在才知道boost就有解析的库,学习一下吧 property_tree可以解析xml,json,ini,i ...
- 【Android进阶】Gson解析json字符串的简单应用
在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...
- Gson+GsonFormat+Postman简单粗暴解析json
现在有时候之前的项目需要返回来修改bug看到以下这段代码 if (test != null) { JSONTokener jsonParser = new JSONTokener(test); JSO ...
- iOS开发-简单解析JSON数据
什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {“nam ...
- Json的简单介绍和解析
Json:JavaScript对象表示法(JavaScript Object Noatation) Json是存储和交换文本信息的语法,类似XML.它采用键值对的方式来组织,易于人们阅读和编写,同时也 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- 阶段一:通过网络请求,获得并解析JSON数据(天气应用)
“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 在上一篇阶段一:解析JSON中提到,最近在写一个很简单的天气预报应用.即使功能很简单,但我还是想把它做成一个相对完 ...
- 阶段一:解析JSON
“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 最近学到解析JSON格式的网络数据,而作业也要求自己找一个天气预报的API地址,然后解析其中JSON格式的数据.可 ...
随机推荐
- hdu 4704 sum(费马小定理+快速幂)
题意: 这题意看了很久.. s(k)表示的是把n分成k个正整数的和,有多少种分法. 例如: n=4时, s(1)=1 4 s(2)=3 1,3 3,1 2,2 s ...
- codeforces 659G G. Fence Divercity(dp)
题目链接: G. Fence Divercity time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 洛谷 P4721 [模板]分治FFT —— 分治FFT / 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4721 分治做法,考虑左边对右边的贡献即可: 注意最大用到的 a 的项也不过是 a[r-l] ,所以 NTT 可以 ...
- VijosP1595:学校网络(有向图变强连通图)
描述 一些学校的校园网连接在一个计算机网络上.学校之间存在软件支援协议.每个学校都有它应支援的学校名单(学校a支援学校b,并不表示学校b一定支援学校a).当某校获得一个新软件时,无论是直接得到的还是从 ...
- HDU1269(有向图缩点模板题)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 如何用python最快的获取大文件的最后几行
工作中经常会遇到处理日志文件的问题:为了得到日志的最新状态,我们需要获取日志文件的最后部分行来做判断.那么,这种情况下我们应该怎么做呢? 1)常规方法:从前往后依次读取 步骤:open打开日志文件. ...
- 【机器学习】分类算法——Logistic回归
一.LR分类器(Logistic Regression Classifier) 在分类情形下,经过学习后的LR分类器是一组权值w0,w1, -, wn,当测试样本的数据输入时,这组权值与测试数据按照线 ...
- linux下libphenom的测试代码
使用说明:测试使用libphenom库的字符串追加函数,效率是strcat的60多倍.所以在进行大量的字符串累加的时候可以考虑使用libphenom库 依赖库: ck-.tar.gz cmake-. ...
- L2-014. 列车调度 (DP)
火车站的列车调度铁轨的结构如下图所示. Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口 ...
- C#连接Oracle数据库解决报错(需要安装Oracle客户端软件8.1.7)的问题
1.通过nuget安装 ManagedDataAccess 2.引用 using Oracle.ManagedDataAccess.Client; 注:最低framework4.0 测试连接: // ...