最近在解析接口返回的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
相关推荐
JSON Path是由Goessner在2007年提出的,它的主要目标是为JSON数据提供一个简单的路径语言,方便在JSON文档中查找和提取数据。JSON Path的语法包括路径表达式、过滤器、索引和操作符等,使得开发者可以方便地获取JSON...
首先,你可以使用JSON4S解析JSON输入,然后将其转化为AST,方便操作和验证。接着,你可以使用JSON Path表达式来定位和提取AST中的特定数据,并结合断言库(如在json-path-assert-2.1.0中提供的)来确保提取的数据...
json格式 解析_json格式化解析校验器在线工具_json format 网址:http://www.json8.net/
它被广泛应用于前端开发,尤其是在处理和解析JSON数据时。这个开源库——`json-path`,是专为Node.js和现代浏览器设计的,使得在JavaScript环境中操作JSON数据变得简单易行。 在前端开发中,数据交互通常涉及JSON...
以下是一个使用Jackson解析JSON文件的例子: ```java import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.io.IOException; public class JsonExample { public static void ...
3. 解析JSON字符串:使用`org.json`库的`JSONObject`或`JSONArray`类解析JSON内容。 - 对于对象(Object): ```java JSONObject jsonObject = new JSONObject(jsonString); String name = jsonObject.getString...
【标题】:“java解析DWG文件为json使用superMap” 【描述】:“java使用superMap解析DWG文件为json输出,本地通过,附件中为word操方式按照步骤可以导入数据集” 【标签】:“java解析DWG文件json java读取dwg...
总结来说,Spark SQL提供了强大的工具来解析和操作JSON数据,包括 `get_json_object` 用于提取单个字段,`from_json` 用于根据模式解析JSON,以及 `to_json` 用于将数据转化为JSON格式。随着Spark SQL对JSON支持的...
解析JSON字符串可以使用`JsonConvert.DeserializeObject`方法。假设我们有一个如下的JSON字符串: ```json { "root": { "children": [ { "name": "节点1", "children": [ {"name": "子节点1.1"}, {"name": ...
JSON官网上推荐的使用java解析json的类库,官网下载后的是未编译打包的java文件,这是我打包后的东东,使用时直接添加进Build path即可,简单实用……
在这个场景中,我们关注的是如何使用Qt5来解析JSON文件,这是现代网络服务和数据交换中常见的格式。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成...
本文将详细介绍如何在C#中解析JSON数据。 首先,C#提供了多种库来解析和序列化JSON数据,其中最常用的是Newtonsoft.Json,也被称为Json.NET。Json.NET是.NET平台上功能强大的JSON库,支持.NET Framework、.NET Core...
Java使用JSONPath解析JSON完整内容详解 JsonPath是一种用于从JSON文档中提取特定数据片段的查询语言。它的语法类似于CSS选择器,能够精确地定位到JSON结构中的特定位置,从中提取所需的数据。对于开发者来说,...
本篇文章将详细阐述如何使用Gson库解析JSON文件,帮助开发者理解并掌握这一技能。 首先,我们需要了解什么是JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...
- 解析JSON字符串:将JSON格式的文本转换为Delphi的对象结构,如对象、数组、字符串、数字、布尔值和null。 - 序列化Delphi对象:将Delphi对象转换为JSON字符串,以便在网络上传输或保存到文件。 在实际应用中,...
例如,你可以用FOR JSON AUTO或FOR JSON PATH构建JSON格式的输出,通过指定ROOT选项添加根节点,或者使用INCLUDE_NULL_VALUES包括NULL值。 此外,列的别名可以用来创建具有层次结构的JSON对象。在JSON_QUERY和JSON_...
本教程将详细讲解如何在Idea中使用Java解析JSON文件,并将数据有效地导入到MySQL数据库。 首先,我们需要理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器...
使用SuperObject解析JSON数据的基本步骤如下: 1. 导入必要的单元: ```delphi uses SuperObject; ``` 2. 创建一个SuperObject实例,并加载JSON字符串或文件: ```delphi var JSON: ISuperObject; begin ...
在Java项目中引入这三个jar包后,你就可以轻松地解析JSON数据,无论是简单的键值对还是复杂的嵌套结构。例如,你可以创建一个`JsonPath`对象,然后调用其`read()`方法,传入JSON字符串和JSONPath表达式,来获取你...
### Jquery解析json #### 知识点概览 1. **JSON介绍** 2. **jQuery与JSON数据交互** 3. **Struts2框架简介** 4. **JSON类库的选择与使用** 5. **服务器端Java程序编写** 6. **前端jQuery解析JSON数据** #### JSON...