使用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(从简单到复杂)的更多相关文章

  1. C# 后台解析json,简单方法 字符串序列化为对象,取值

    如果后台是一个JSON的字符串格式如下: string str = "{\"Success\":true,\"Msg\":\"成功!\&qu ...

  2. Boost property_tree解析json

    使用Boost property_tree解析json 之前使用jsoncpp解析json,现在才知道boost就有解析的库,学习一下吧 property_tree可以解析xml,json,ini,i ...

  3. 【Android进阶】Gson解析json字符串的简单应用

    在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...

  4. Gson+GsonFormat+Postman简单粗暴解析json

    现在有时候之前的项目需要返回来修改bug看到以下这段代码 if (test != null) { JSONTokener jsonParser = new JSONTokener(test); JSO ...

  5. iOS开发-简单解析JSON数据

    什么是JSON   JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组   {“nam ...

  6. Json的简单介绍和解析

    Json:JavaScript对象表示法(JavaScript Object Noatation) Json是存储和交换文本信息的语法,类似XML.它采用键值对的方式来组织,易于人们阅读和编写,同时也 ...

  7. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  8. 阶段一:通过网络请求,获得并解析JSON数据(天气应用)

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 在上一篇阶段一:解析JSON中提到,最近在写一个很简单的天气预报应用.即使功能很简单,但我还是想把它做成一个相对完 ...

  9. 阶段一:解析JSON

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 最近学到解析JSON格式的网络数据,而作业也要求自己找一个天气预报的API地址,然后解析其中JSON格式的数据.可 ...

随机推荐

  1. IDEAL葵花宝典:java代码开发规范插件 Rainbow Brackets 插件

    前言: 最近在Jetbrains IDEA插件网站逛发现了 Rainbow Brackets这款插件,非常棒,推荐给大家. 可以实现配对括号相同颜色,并且实现选中区域代码高亮的功能. 对增强写代码的有 ...

  2. phpunit 入门

    话说,使用phpunit还是处于好奇之心,为什么以前一直没使用呢?主要是嫌麻烦,小项目,前后端都是自己写,几个人就完成的工作,没必要弄的那么麻烦.好了,废话不多说,让我们一起来感受下phpunit吧! ...

  3. swoole的http服务

    PHP实现基于Swoole简单的HTTP服务器 引用Swoole官方定义: PHP语言的异步.并行.高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户 ...

  4. 【坑坑坑坑坑】fwrite没有把数据写到文件中???

    原文:https://blog.csdn.net/kuaidfkuai/article/details/45918025 <unix环境高级编程>中介绍标准IO: 标准IO流操作读写普通文 ...

  5. C++中的宏和const

    在C语言中使用const来定义一个变量,可以通过变量类型的指针形式来进行修改,而C++中增强了这种表现形式,使得即使通过类型变量指针也不能对变量进行修改. 在C++中const和宏是有区别的. con ...

  6. jquery新添加元素无法删除

    $("body").on('click',".delic",function(){ $(this).parent().remove(); })

  7. wingide 显示中文 及 配色方案

    http://lihuipeng.blog.51cto.com/3064864/923231 网上收集的方法: 显示中文: 任意文本编辑器打开:x:\Wing IDE\bin\gtk-bin\etc\ ...

  8. 「NOIP2013」「LuoguP1967」货车运输(最大生成树 倍增 LCA

    题目描述 AA国有nn座城市,编号从 11到nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最 ...

  9. 发个IOCP的C++例子

    IOCP的c++例子 IOCP这个东西连续关注了将近3年的时间,这个代码从哪里找到的已经忘了,下面是作者的信息.感谢他提供的代码! /*++ Copyright (c) 2004 模块名: iomod ...

  10. 廖雪峰的java教程

    F:\教程\0-免费下载-廖雪峰 公司电脑地址: G:\学习中\廖雪峰的java教程 廖雪峰java课程地址: https://www.feiyangedu.com/category/JavaSE 0 ...