zoukankan      html  css  js  c++  java
  • json解析Object

    最近的工作是在数据库使用myBaties查出的数据没有实体,

    比如:

    <select id="allTree" parameterType="String" resultType="java.util.Map">
    ${sql}
    </select>

    这样查出来

    直接是object或者是List<Object>的数据,需要自己去解析获取字段名和值。

    一开始想用反射,但是t好像没法获取get Set方法吧,我有点懵,后来想到转成json会好获取一点。写了几个方法。

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    /**
     * json 解析工具类
     * @author heqiao
     *
     */
    public class JsonUtil {
        /**
         * 单个对象的所有键值
         * 
         * @param object  单个对象
         * 
         * @return Map<String, Object> map   所有   String键   Object值
         *             ex:{pjzyfy=0.00, xh=01, zzyl=0.00, mc=住院患者压疮发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=921, zssl=0.00}
         */
        public static Map<String, Object> getValue(Object object) {
            Map<String, Object> map = new HashMap<String, Object>();
            Object obj = JSONObject.toJSON(object);//将对象转化为json格式对象
            JSONObject jsonObject = JSONObject.parseObject(obj.toString());//转化为json对象
            Set<String> s = jsonObject.keySet();//获取所有的键
            for (String string : s) {
                map.put(string, jsonObject.get(string));//根据键获取值
            }
            System.out.println("单个对象的所有键值===="+map.toString());
            return map;
        }
        
        
        /**
         * 单个对象的某个键的值
         * @param object 对象
         * 
         * @param key  键
         * 
         * @return   Object   键在对象中所对应得值
         */
        public static Object getValueByKey(Object object, String key) {
            Object obj = JSONObject.toJSON(object);//将对象转化为json格式对象
            JSONObject jsonObject = JSONObject.parseObject(obj.toString());//转化为JSONObject对象
            System.out.println("单个对象的某个键的值===="+jsonObject.get(key));
            return jsonObject.get(key);//根据键获取值
        }
    /**
     * 多个(列表)对象的所有键值
     * @param object
     * @return List<Map<String,Object>> 列表中所有对象的所有键值
     * ex:[{pjzyfy=0.00, xh=01, zzyl=0.00, mc=住院患者压疮发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=921, zssl=0.00}, 
     *     {pjzyfy=0.00, xh=02, zzyl=0.00, mc=新生儿产伤发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=13, zssl=0.00}, 
     *     {pjzyfy=0.00, xh=03, zzyl=0.00, mc=阴道分娩产妇产伤发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=0, zssl=0.00}, 
     *     {pjzyfy=0.00, xh=04, zzyl=0.75, mc=输血反应发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=0, zssl=0.00}, 
     *     {pjzyfy=5186.12, xh=05, zzyl=0.00, mc=剖宫产率, pjypfy=1611.05, rs=13, pjzyts=7.15, czydm=0037, lx=13, zssl=0.00}]
     */
        public static List<Map<String,Object>> getValues(List<Object> object) {
            List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
            Object obj=JSONArray.toJSON(object);//转化为JSONArray格式
            JSONArray jarr = JSONArray.parseArray(obj.toString()); //转化为JSONArray对象
            for (Iterator<Object> iterator = jarr.iterator(); iterator.hasNext();) {
                JSONObject job = (JSONObject) iterator.next();
                Set<String> s=job.keySet();
                Map<String,Object> listChild=new HashMap<String,Object>();
                //获取对象所有键值
                for (String string : s) {
                    listChild.put(string, job.get(string));
                }
                //将对象添加到列表中
                list.add(listChild);
              }
            System.out.println("多个(列表)对象的所有键值===="+list.toString());
            return list;
        }
    /**
     * 多个(列表)对象的某个键的值
     * @param object
     * @param key  要查找的值的字段名
     * @return  List<Object>  键在列表中对应的所有值
     *          ex:[住院患者压疮发生率, 新生儿产伤发生率, 阴道分娩产妇产伤发生率, 输血反应发生率, 剖宫产率]
     */
        public static List<Object> getValuesByKey(List<Object> object, String key) {
             Object obj=JSONArray.toJSON(object);//将对象转化为json格式对象
             JSONArray jarr = JSONArray.parseArray(obj.toString()); 
             List<Object> list=new ArrayList<Object>();
             for (Iterator<Object> iterator = jarr.iterator(); iterator.hasNext();) {
                 JSONObject job = (JSONObject) iterator.next();
                     list.add(job.get(key));//根据键获取值并添加到list中
               }
            System.out.println("多个(列表)对象的某个键的值列表===="+list.toString());
            return list;
        }
    }

     调用:

     List<Object> o=treeService.allTree();

    JsonUtil.getValue(o.get(0));
    JsonUtil.getValueByKey(o.get(0), "mc");
    JsonUtil.getValues(o);
    JsonUtil.getValuesByKey(o, "mc");

  • 相关阅读:
    前端性能优化(css动画篇)
    常用的布局及技巧
    一些有用的技能点
    做webApp遇到的一些坑及解决方案
    mysql5.7.30 编译安装
    windows使用Pandoc将Markdown转换为PDF文件
    源码编译安装keepalived
    源码编译php
    源码编译nginx
    源码编译PHP提示zip错误
  • 原文地址:https://www.cnblogs.com/Spirit612/p/6728957.html
Copyright © 2011-2022 走看看