在Java中用 . 深层访问JSON数据

本文介绍Java中解析JSON的一种方法,可以让我们在Java程序中也用x.x.x的形式访问JSON数据中的值。

代码大部分来源非本人,本人在源代码基础上加以修改以使正常运行。

代码:

		// 将提取方法进行封装成方法 方便调用
	    @SuppressWarnings("unchecked")
		public static Object getKeyJsonQuery(Map<?,?> map ,String jsonKey){
	        String[] arrs = jsonKey.split("\\.");
	        Object obj = null;
	        for(int i=0;i<arrs.length;i++){
	            if(i==0) {
	                obj = handle(map, arrs[i]);
	            }else{
	                if(obj instanceof Map){
	                    obj = handle((Map<?, ?>) obj,arrs[i]);
	                }else if(obj instanceof List){
	                    obj = handle((List<Map<?, ?>>) obj,arrs[i]);
	                }
	            }
	        }
	        return obj;
	    }
	    //解析map类型的对象
	    public static Object handle(Map<?,?> map,String key){
	        return map.get(key);
	    }
	    // 解析list类型的对象
	    @SuppressWarnings("unchecked")
		public static Object handle(List<Map<?,?>> listMap,String key){
	        List<Map<String,Object>> listMaps = new ArrayList<>();
	        List<Object> lists = new ArrayList<>();
	        // 这里用到了java8的一个新特性 stream 流
	       listMap.stream().filter(e->null !=e.get(key) ).forEach(e->{
	            //表示既不是map 又不是list类型
	            if(!(e.get(key) instanceof Map<?,?>) && !(e.get(key) instanceof List<?>) ) {
	               lists.add(e.get(key));
	            }else{
	               listMaps.addAll((Collection<? extends Map<String, Object>>) e.get(key));
	            }
	        });
	        return lists.size()>0 && !lists.isEmpty() ? lists:listMaps;
	    }
	
		public static void main(String[] args) throws Exception {
		       String json = "{\"data\":{\"order\":[{\"money\":\"15\",\"orders\":[{\"b1\":[{\"bc1\":\"1\",\"bc2\":\"2\"},{\"bc1\":\"2\",\"bc2\":\"3\"}],\"b2\":\"2\"},{\"b1\":[{\"bc1\":\"1\",\"bc2\":\"2\"},{\"bc1\":\"2\",\"bc2\":\"3\"}],\"b2\":\"3\"}]},{\"money\":\"16\",\"orders\":[{\"b1\":[{\"bc1\":\"1\",\"bc2\":\"2\"},{\"bc1\":\"2\",\"bc2\":\"3\"}],\"b2\":\"2\"},{\"b1\":[{\"bc1\":\"1\",\"bc2\":\"2\"},{\"bc1\":\"2\",\"bc2\":\"3\"}],\"b2\":\"3\"}]},{\"money\":\"17\",\"orders\":[{\"b1\":[{\"bc1\":\"1\",\"bc2\":\"2\"},{\"bc1\":\"2\",\"bc2\":\"3\"}],\"b2\":\"2\"},{\"b1\":[{\"bc1\":\"1\",\"bc2\":\"2\"},{\"bc1\":\"2\",\"bc2\":\"3\"}],\"b2\":\"3\"}]}],\"info\":{\"record\":[{\"a1\":\"1\",\"a2\":\"2\"},{\"a1\":\"1\",\"a2\":\"2\"},{\"a1\":\"1\",\"a2\":\"2\"}]}},\"time\":{\"addr\":\"123\",\"num\":{\"a\":\"111\",\"b\":\"222\"}}}";
		        Gson gson = new Gson();
		        @SuppressWarnings("unchecked")
				Map<String,Object> map = gson.fromJson(json, Map.class);
		        System.out.println(map.toString());
		        String jsonKey = "data.order.money";
		        //String jsonKey = "time.num.a";
		        //String jsonKey ="data.info";
		       Object obj =  getKeyJsonQuery(map,jsonKey);
		       System.out.println(obj.toString());
		}
好的,以下是一个使用Java中的HttpURLConnection进行POST请求的示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; public class HttpPostExample { public static void main(String[] args) { try { // 设置POST请求的URL地址和参数 String url = "http://example.com/api"; String params = "name=" + URLEncoder.encode("John", StandardCharsets.UTF_8) + "&age=" + URLEncoder.encode("25", StandardCharsets.UTF_8); // 创建HttpURLConnection对象并设置请求方法和参数 HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); con.setRequestMethod("POST"); con.setDoOutput(true); con.setRequestProperty("Content-Length", Integer.toString(params.length())); // 提交POST请求参数 con.getOutputStream().write(params.getBytes(StandardCharsets.UTF_8)); // 解析返回的结果 BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String line; StringBuilder response = new StringBuilder(); while ((line = in.readLine()) != null) { response.append(line); } in.close(); // 输出结果 System.out.println(response.toString()); } catch (Exception e) { System.out.println("Error: " + e.getMessage()); } } } ``` 这个示例中,我们使用了HttpURLConnection对象来创建POST请求,设置请求的URL地址和参数,并将参数以字节流的形式提交到服务器。最后,我们输出服务器的响应结果。 请注意,这个示例只是说明了如何使用Java进行POST请求,并不代表特定的业务场景,实际业务场景可能需要更复杂的逻辑和处理流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值