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\">\n" +
                                "<h3>"+map.get("group")+"</h3>\n" +
                                "<dl>\n";
                        //这里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>\n" +
                                    "<dd>"+param.get("v")+"</dd>\n" ;
                        }
                        html+="</dl>\n" +
                                "    </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": [
            "机身内存",
            "储存卡类型"
        ]
    }
]

 

posted @ 2018-10-18 17:23  戈博折刀  阅读(1628)  评论(0编辑  收藏  举报