`
53873039oycg
  • 浏览: 824090 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]使用json path解析json

    博客分类:
  • java
阅读更多

      最近在解析接口返回的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

 

  • 大小: 68.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics