• json 串转成 java 对象再拼接成前台 html 元素


    获取商品参数 json 串,转成 java 对象,再拼接成前台 html 的Service方法

    @Override
        public String getItemParam(Long itemId) {
            try {
                String json = HttpClientUtil.doGet(REST_BASE_URL+ITEM_PARAM_URL+itemId);
                if (StringUtils.isNotEmpty(json)) {
                    TaotaoResult taotaoResult = TaotaoResult.formatToPojo(json, TbItemParamItem.class);
                    if (taotaoResult.getStatus()==200) {
                        TbItemParamItem itemParamItem = (TbItemParamItem) taotaoResult.getData();
                        String data = itemParamItem.getParamData();
                        String html = "";
                        //把规格参数字符串转换为json对象(这里是转换成了List集合,集合里面存的map键值对)
                        List<Map> jsonList = JsonUtils.jsonToList(data, Map.class);
                        for (Map map : jsonList) {
                            html+="<div class="Ptable-item">
    " +
                                    "<h3>"+map.get("group")+"</h3>
    " +
                                    "<dl>
    ";
                            //这里map里面的key params 对应的值还是可以强制转为另一个map(因为map里面的建和值都可以是对象)
                            //因为前面已经用 JsonUtils.jsonToList 整体转换过,所以这里只要强制转换即可
                            List<Map> paramList = (List<Map>) map.get("params");
                            for (Map param : paramList) {
                                html+=    "<dt>"+param.get("k")+"</dt>
    " +
                                        "<dd>"+param.get("v")+"</dd>
    " ;
                            }
                            html+="</dl>
    " +
                                    "    </div>";
                        }
                        System.out.println(html);
                        return html;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            return "";
        }

    在数据库中存储的 json 串:

    [
        {
            "group": "主体",
            "params": [
                {
                    "k": "品牌",
                    "v": "花纹"
                },
                {
                    "k": "型号",
                    "v": "555"
                },
                {
                    "k": "颜色",
                    "v": "666"
                },
                {
                    "k": "上市年份",
                    "v": "6666"
                }
            ]
        },
        {
            "group": "网络",
            "params": [
                {
                    "k": "4G网络制式",
                    "v": "66"
                },
                {
                    "k": "3G网络制式",
                    "v": "66"
                },
                {
                    "k": "2G网络制式",
                    "v": "66"
                }
            ]
        },
        {
            "group": "存储",
            "params": [
                {
                    "k": "机身内存",
                    "v": "66"
                },
                {
                    "k": "储存卡类型",
                    "v": "66"
                }
            ]
        }
    ]

    通过

    List<Map> jsonList = JsonUtils.jsonToList(data, Map.class);

    方法 转换成 java对象 后的样子:

    [
        {         GROUP = 主体,
                  params =[
                            { k = 品牌, v = 花纹 }, 
                            { k = 型号, v = 555 }, 
                            { k = 颜色, v = 666 }, 
                            { k = 上市年份, v = 6666 }
                          ]
        }, 
    
        {         GROUP = 网络,
                    params =[
                              { k = 4G网络制式, v = 66 },
                              { k = 3G网络制式, v = 66 }, 
                              { k = 2G网络制式, v = 66 }
                            ]
        },
     
    
        {         GROUP = 存储,
                    params =[
                              { k = 机身内存, v = 66 },
                              { k = 储存卡类型, v = 66 }
                            ]
        }
    ]

    最外层是个 list ,然后里面是 map1,map1 里面的 key 为 params 的值 还是一个 List2,然后里面又是 Map2

    下面附上 json工具类的代码:

    package com.taotao.common.utils;
    
    import java.util.List;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.JavaType;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class JsonUtils {
    
        // 定义jackson对象
        private static final ObjectMapper MAPPER = new ObjectMapper();
    
        /**
         * 将对象转换成json字符串。
         * <p>Title: pojoToJson</p>
         * <p>Description: </p>
         * @param data
         * @return
         */
        public static String objectToJson(Object data) {
            try {
                String string = MAPPER.writeValueAsString(data);
                return string;
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return null;
        }
        
        /**
         * 将json结果集转化为对象
         * 
         * @param jsonData json数据
         * @param clazz 对象中的object类型
         * @return
         */
        public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
            try {
                T t = MAPPER.readValue(jsonData, beanType);
                return t;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        
        /**
         * 将json数据转换成pojo对象list
         * <p>Title: jsonToList</p>
         * <p>Description: </p>
         * @param jsonData
         * @param beanType
         * @return
         */
        public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
            JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
            try {
                List<T> list = MAPPER.readValue(jsonData, javaType);
                return list;
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            return null;
        }
        
    }

    下面附上分类模板的数据库中存的 json 串(仅供参考模板和最终值直接的关系):

    [
        {
            "group": "主体",
            "params": [
                "品牌",
                "型号",
                "颜色",
                "上市年份"
            ]
        },
        {
            "group": "网络",
            "params": [
                "4G网络制式",
                "3G网络制式",
                "2G网络制式"
            ]
        },
        {
            "group": "存储",
            "params": [
                "机身内存",
                "储存卡类型"
            ]
        }
    ]
  • 相关阅读:
    Python 编程笔记(小白初学篇)
    博客园设置好看的主题!站在巨人的肩膀上眺望远方!!
    Matlab 画地图之 m_map
    SSO+PHS 同步问题修正解决
    从已删除邮箱copy数据到活动邮箱
    微软AD相关操作的免费工具
    phpize是什么
    apache的bin目录下的apxs有什么作用? PHP模块加载运行方式
    docker
    sed 命令
  • 原文地址:https://www.cnblogs.com/libin6505/p/9811799.html
Copyright © 2020-2023  润新知