在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());
        }
---------------------
作者:YancyMauno
来源:CSDN
原文:https://blog.csdn.net/ITmaotongxue/article/details/83013769?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/Mauno/p/9772951.html

时间: 2024-10-10 10:57:19

在Java中用 . 深层访问JSON数据的相关文章

Java构造和解析Json数据的两种方法详解一

原文链接:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多Java下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法示例. 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 一.介绍 JSO

【转】Java构造和解析Json数据的两种方法详解一

Java构造和解析Json数据的两种方法详解一 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法示例. 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和J

Java构造和解析Json数据的两种方法详解一——json-lib

转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法示例. 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 一.介绍 JSON-

Java构造和解析Json数据的两种方法详解二——org.json

转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法示例.       用json-lib构造和解析Json数据的方法详解请参见我上一篇博文:Java构造和解析Json数据的两种方法详解一 一.介

Ajax + java 跨域访问Json

使用jsonp跨域获取json数据.Ajax获取JAVA服务器json数据. 在Servlet 中代码: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Access-Control-Allow-Origin", "*");//开启CORS,

java连接MySQL数据库 json数据前后端交互

先在下图文件夹中导入相应的jar包,其中第一个红框中的是使用json数据必须导入的两个包,上面5个jar包也是json包,看情况添加,第二个红框是用JDBC连接MySQL数据库必须的包. 连接MySQL的工具类: package com.XXXXXX.util; import java.sql.Connection; import java.sql.DriverManager; public class MysqlUtil { private static Connection conn = n

Java类对象和Json数据之间的转换

表字段过多,不想分别保存到数据中,使用频率低,所以考虑使用Jave类 -- Json之间的数据转换. 1.类转换Json,并保存到数据 Attribute.java 1 /** 2 * 属性数据结构 3 * 4 */ 5 public class Attribute { 6 7 private static final long serialVersionUID = -1L; 8 9 private Long attrId; 10 11 private List<AttributeValue>

php 解析java传过来的json数据

例如: java所传json数据: array(1) { ["info"]=> string(1437) "{"error_data":[{"error_info":"通道绑卡失败","mobile":"15605139548","detail_no":"201709211201019981","error_no"

Java构造和解析Json数据的两种方法详解二(转)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法示例. 一.介绍 org.json包是另一个用来beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.json.org/上有详细讲解,有兴趣的可以去研究. 二.下载jar依赖包