最近在解析接口返回的json格式时候,遇到了一些较复杂的格式,就是符合条件的数据格式不固定,可能是Map,也可能是List,写代码的时候写了很多instanceof判断导致代码很复杂
json如下图,
其实只需要找出符合resources_code=04里面的remain_res,但是resources_info和sec_resources_info不固定(List,Map),这种情况下可以使用json path解析比较方便.
代码如下:
import com.jayway.jsonpath.Filter; import com.jayway.jsonpath.JsonPath; public void test3() { String jsonStr = "{ \"status\": 0, \"message\": \"成功\", \"data\": { \"opr_time\": \"20150612125212\", \"plan_remain\": [ { \"plan_name\": \"测试套餐\", \"plan_i_d\": \"000001\", \"resources_info\": [ { \"resources_code\": \"04\", \"sec_resources_info\": [ { \"sec_resources_name\": \"省内流量\", \"resources_left_info\": { \"total_res\": \"100\", \"used_res\": \"50\", \"remain_res\": \"50\", \"unit\": \"02\", \"valid_date\": \"20150611235959\" } }, { \"sec_resources_name\": \"数据流量\", \"resources_left_info\": { \"total_res\": \"100\", \"used_res\": \"40\", \"remain_res\": \"60\", \"unit\": \"02\", \"valid_date\": \"20150611235959\" } } ] }, { \"resources_code\": \"04\", \"sec_resources_info\": { \"sec_resources_name\": \"省内流量\", \"resources_left_info\": { \"total_res\": \"102400\", \"used_res\": \"88336\", \"remain_res\": \"14064\", \"unit\": \"03\", \"valid_date\": \"20150611235959\" } } } ] }, { \"plan_name\": \"测试套餐2\", \"plan_i_d\": \"0002\", \"resources_info\": { \"resources_code\": \"04\", \"sec_resources_info\": { \"sec_resources_name\": \"省内流量\", \"resources_left_info\": { \"total_res\": \"200\", \"used_res\": \"47\", \"remain_res\": \"153\", \"unit\": \"01\", \"valid_date\": \"20150611235959\" } } } }, { \"plan_name\": \"测试套餐3\", \"plan_i_d\": \"0003\", \"resources_info\": { \"resources_code\": \"04\", \"sec_resources_info\": { \"sec_resources_name\": \"省内流量\", \"resources_left_info\": { \"total_res\": \"2400\", \"used_res\": \"626\", \"remain_res\": \"1774\", \"unit\": \"01\", \"valid_date\": \"20150611235959\" } } } }, { \"plan_name\": \"测试套餐4\", \"plan_i_d\": \"00044\", \"resources_info\": [ { \"resources_code\": \"04\", \"is_multi_term\": \"0\", \"sec_resources_info\": { \"sec_resources_name\": \"数据流量\", \"resources_left_info\": { \"total_res\": \"30720\", \"used_res\": \"30720\", \"remain_res\": \"0\", \"unit\": \"03\", \"valid_date\": \"20150612143627\" } } }, { \"resources_code\": \"01\", \"is_multi_term\": \"1\", \"sec_resources_info\": { \"sec_resources_name\": \"语音\", \"resources_left_info\": { \"total_res\": \"150\", \"used_res\": \"37\", \"remain_res\": \"113\", \"unit\": \"01\", \"valid_date\": \"20150612143627\" } } } ] } ] } } "; JsonPath path = JsonPath .compile("$.data.plan_remain..resources_info[?(@.resources_code == '04')].sec_resources_info..resources_left_info.remain_res"); List<Object> resourceList = path.read(jsonStr); for (Object obj : resourceList) { if (obj instanceof String) { System.out.println(obj.toString()); } } }
结果为:
50 60 14064 153 1774 0
相关推荐
NULL 博文链接:https://huan1993.iteye.com/blog/2406271
JSON官网上推荐的使用java解析json的类库,官网下载后的是未编译打包的java文件,这是我打包后的东东,使用时直接添加进Build path即可,简单实用……
URL url = new URL(path); //创建一个Url对象 //得到打开的链接对象 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求超时与请求方式 conn.setReadTimeout(5*1000); conn...
jsonPath所需jar包,用于解析json数据,包括单层json和多层json,简单方便好用,是一个不错的解析json数据的工具类。
i++){ //path是json解析后的图片路径 String path=array.getJSONObject(i).getString("icon");在这里得到JOSN解析后的图片路径后,如何再通过创建文件,并判断文件中是否存在这张图片,如果有的情况下去直接从SD卡...
hive解析json时所需jar包。具体使用: add jar ../../../target/json-serde-1.3-jar-with-dependencies.jar; CREATE TABLE json_nested_test ( country string, languages array, religions map,array<int>>) ...
wpf里面读取json地址数据,绑定到combobox里面达到三级联动的效果
目的:当App中用到固定的json数据时,如:国家城市列表、班级成员等时,可以将json数据制作为本地json文件存入assets文件夹下。 步骤如下: 1、新建assets文件夹,并将json文件复制到此文件夹中 在main文件夹下新建...
自定义抽象语法树JSON模板
//解析JSON文本 public void parseJson(String json) {parseJson(json,"j");} public void parseJson(String json,String prefix) { int pos = json.indexOf("["); if(pos==-1) { try { JSONObject...
pptx2json 将 Powerpoint 文件(Microsoft Office 2007 及更高版本)作为 Office Open XML 操作,无需外部工具,仅使用纯 Javascript。 提供两个主要功能: 从 PowerPoint 文件解析为 Json 从 Json 解析到 ...
java使用fastJson处理复杂Json字符串,直接获取key对应的value值
将Open Office XML生成的PPTX解析为JSON 安装 $ npm install pptx-compose 有关API更新和兼容性问题,请参见的。 用法 import PPTXCompose from "pptx-compose" ; // Initialize repo const composer = new ...
只需从任何输入源解析JSON。 受启发; 不能替代。 支持和。 还支持标准输入流(请参见最后一个示例),即逐行。 yarn global add jp-cli || npm install -g jp-cli 用法 Pipe jp onto a JSON source from the ...
bigquery-json-extension是chrome扩展程序,它添加了模拟函数,用于基于正则表达式的json字符串属性的解析。 安装 克隆存储库 在chrome中,请访问: chrome://extensions/ 检查“开发人员模式” 单击“加载解压缩...
jsonpath 用于多层嵌套 json格式的 解析。 pip install jsonpath JsonPath 描述 $ 根节点 @ 现行节点 .or[] 取子节点 n/a 取父节点,jsonpath为支持 .. 就是不管位置,选择所有复合条件的条件 * ...
json 解析pas单元和json查看工具。一下是版本 * v1.2 * + support of currency data type * + right trim unquoted string * + read Unicode Files and streams (Litle Endian with BOM) * + Fix bug on ...
json-position-parser 一个带有位置的简单json解析器。 例子: let json = "{ \"a\": {}, \"b\": { \"c\": [true, { \"e\": 42 } ] }, \"f\": [false, { \"e\": 21 } } ] } }";match super::parse_json(json) { Ok...
保存首选语法设置•在“ Chrome开发工具元素”标签中添加“ JSON”窗格以查看应用程序/ json脚本标签的解析内容•JSONP支持•快速,甚至在长页面上使用•在任何有效的JSON页面上均可使用– URL无关紧要•语法突出...