获取商品参数 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": [
"机身内存",
"储存卡类型"
]
}
]

json 串转成 java 对象再拼接成前台 html 元素的更多相关文章

  1. 利用JAVA反射机制将JSON数据转换成JAVA对象

    net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大,  这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用,   有些数据类型需要进行转 ...

  2. json字符串转json对象,json对象转换成java对象

    @RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @Resp ...

  3. json字符串转成 json对象 json对象转换成java对象

    import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...

  4. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  5. java将map拼接成“参数=值&参数=值”

    Java将Map拼接成"参数=值&参数=值" 把一个map的键值对拼接成"参数=值&参数=值"即"username=angusbao& ...

  6. SOAP报文转成JAVA对象

    在今天以前我还没有用过代码解析过SOAP报文,更别提转成JAVA对象了,今天的任务中报文这个模样的,(为防止数据信息,以下数据我故意打乱了防止泄露什么信息.) <?xml version=&qu ...

  7. 类对象序列化为json串,json串反序列化为类对象

    1.类对象序列化为json串: 方法一: class P(object): def __init__(self,name,age,sex): self.name=name self.age=age s ...

  8. 取得远端相应Json并转化为Java对象(嵌套对象)二

    工程下载链接:https://files.cnblogs.com/files/xiandedanteng/JsonParse20190929.rar 客户端: 如果从Restful Service取得 ...

  9. 比较任意两个JSON串是否相等(比较对象是否相等)JAVA版

    废话少说,直接入题. 在面向对象语言中,经常会比较两个对象是否相等,而比较的大多是实体类实例,也就是封装数据的那些类实例,或者是Map.List互相嵌套成的复杂数据结构. 比较对象是否相等,常见的思路 ...

随机推荐

  1. cmd_menu.c

    #include <common.h>#include <config.h>#include <command.h> static char cmd_buf[200 ...

  2. py3.7.1下pyinstaller 的安装及打包 坑

    实在无语了,写了个小程序,用pyinstaller打包,运行就出现这个pip install pywin32-ctypes.明明全部都已经安装了啊. 解决办法: 不要在工程设置里安装pyinstall ...

  3. ts包、表、子表、section的关系

    我们经常接触到创建 DEMUX,注册 Filter 过滤数据, 通过回调过滤出 section 数据,然后我们对 section 数据做具体的解析或者其他操作. 我们这里说的 section 就是段的 ...

  4. ABAP CDS ON HANA-(10)項目結合して一つ項目として表示

    Numeric Functions ABS(arg)  CEIL(arg) DIV(arg1, arg2) DIVISION(arg1, arg2, dec) FLOOR(arg) MOD(arg1, ...

  5. Java RMI 入门指南

    开通博客也有好些天了,一直没有时间静下心来写博文,今天我就把两年前整理的一篇关于JAVA RMI入门级文章贴出来,供有这方面需要的同学们参考学习. RMI 相关知识 RMI全称是Remote Meth ...

  6. 听雷哥浅谈Redis

    Linux下安装redis 1.下载源码,解压缩后编译源码. $ wget http://download.redis.io/releases/redis-2.8.3.tar.gz $ tar xzf ...

  7. runtime总结 iOS

    Runtime的特性主要是消息(方法)传递,如果消息(方法)在对象中找不到,就进行转发,具体怎么实现的呢.我们从下面几个方面探寻Runtime的实现机制. Runtime介绍 Runtime消息传递 ...

  8. Wireshark lua dissector 对TCP消息包合并分析

    应用程序发送的数据报都是流式的,IP不保证同一个一个应用数据包会被抓包后在同一个IP数据包中,因此对于使用自制dissector的时候需要考虑这种情况. Lua Dissector相关资料可以见:ht ...

  9. Mac下安装pear库+phpDocumentor

    1. 首先安装pear: curl -o go-pear.php https://pear.php.net/go-pear.phar 看见这个就安装OK: % Total % Received % X ...

  10. 更换ubuntu软件源的方法

    第一步:查看本系统Codename 输入lsb_release -a查看本系统Codename,我的codename是bionic,如图: 第二步:搜索与codename对应的镜像地址 我搜索到的是: ...