1. 程式人生 > >json 串轉成 java 物件再拼接成前臺 html 元素

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": [
            "機身記憶體",
            "儲存卡型別"
        ]
    }
]