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": [
            "機身內存",
            "儲存卡類型"
        ]
    }
]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM