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");

  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/Spirit612/p/6728957.html
Copyright © 2011-2022 走看看