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

  • 相关阅读:
    盘点 Oracle 11g 中新特性带来的10大性能影响
    史上最全Oracle数据泵常用命令
    Oracle查看 open_cursors 和 session_cached_cursors
    SLES 12: Database Startup Error with ORA-27300 ORA-27301 ORA-27303 While Starting using Srvctl (Doc ID 2340986.1)
    FAQ: Oracle Flex ASM 12c / 12.1 (Doc ID 1573137.1)
    Test Case:: 12C ASM New feature (Doc ID 1571975.1)
    Test Case:: 12C ASMCMD New feature (Doc ID 1589249.1)
    如何在Oracle 12C中Drop/Truncate多个分区 (Doc ID 1482264.1)
    如何在Oracle 12C中添加多个分区 (Doc ID 1482456.1)
    12c分区增强功能,新功能(文档ID 1568010.1)
  • 原文地址:https://www.cnblogs.com/Spirit612/p/6728957.html
Copyright © 2020-2023  润新知