获取商品参数 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. CentOS 同步时间的方法

    与时间服务器上的时间同步的方法 1.  安装ntpdate工具 # yum -y install ntp ntpdate 2.  设置系统时间与网络时间同步 # ntpdate cn.pool.ntp ...

  2. python3 练习题100例 (二十八)打印一定范围内的素数

    题目内容: 给定一个大于2的正整数n,打印出小于n(不包括n且n不大于100)的所有素数. 要求将符合条件的输出填入一个列表中,打印的结果为该列表. 输入格式: 共一行,为一个大于2的正整数 输出格式 ...

  3. 模块导入应用settings的字符串

    看django源码,感觉他的settings好高大上然后自己试试 以上是文件目录 email.py中代码 class Email: def send(self): print('发送email') M ...

  4. 第一天的题目 简单A+B 植树问题 多项式的值

    #include<stdio.h> int main() { int a=0;b=0; scanf("%d%d",&a,&b); printf(&quo ...

  5. POJ3687 反向拓扑排序

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16032   Accepted: 4713 D ...

  6. 当安装mongodb客户端出现了Failed to load list of databases

    在装mongodb最新版(4.1.5开发版)服务后,我用robo3t打开它的时候遇到了这个问题. 最直接的解决办法就是换一个mongodb版本,https://github.com/Studio3T/ ...

  7. Android Stadio 指定文件打开类型

    我们项目里面,有一个文件,叫做aaa.meta. 这个只是一个配置文件,里面是txt. 但是Android Stadio 不识别.怎么办? 设置如下图: 首先,打开Android stadio 的设置 ...

  8. redis入门:介绍、特点、安装、各类型常用操作

    一.redis介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. Redis支持多种类型的数据结构,如 字符串(strings), 散列(ha ...

  9. 玩转VIM之将Vim全副武装

    玩转VIM之将Vim全副武装 懒癌末期的我貌似很久没有写博客了,已经欠了多少篇在计划中的博客我已然不好意思说了.好了,言归正传,在前三篇介绍了Vim作为代码编辑器之后可能会有人说,要学习那么多指令真的 ...

  10. js字符编码笔记

    一.  什么是unicode? ascii码能表示的字符非常有限(128个字符),这对英文来说足够了,但是对法文.中文.土耳奇文等文字则远远不够,于是就产生了新的编码规则-unicode,unicod ...