在数据库中brand_ids存储的是字符串类型,我们在后端查询出来的结果也是字符串类型,也就是说我们在后端编辑器里无法对这些map类型的list集合字符串进行list或map操作
但这并不影响前端展示这些数据,我们只需要把这些数据以字符串的形式或者整个表返回给前端
前端页面将json格式的字符串数组转化成json对象,之后就可以就进行遍历
$scope.list = JSON.parse(resp.brandIds);
那后端如何将map集合类型的字符串转化成List<Map ?
List<Map> maps = JSON.parseArray(tbTypeTemplate.getBrandIds(), Map.class);
前端要求的返回数据格式:
[{"options":[{"id":98,"optionName":"移动3G","orders":1,"specId":27},{"id":99,"optionName":"移动4G","orders":
2,"specId":27},{"id":100,"optionName":"联通3G","orders":3,"specId":27},{"id":101,"optionName":"联通4G",
"orders":4,"specId":27},{"id":112,"optionName":"电信3G","orders":5,"specId":27},{"id":113,"optionName":
"电信4G","orders":6,"specId":27},{"id":114,"optionName":"移动2G","orders":7,"specId":27},{"id":115,
"optionName":"联通2G","orders":8,"specId":27},{"id":116,"optionName":"电信2G","orders":9,"specId":27},
{"id":117,"optionName":"双卡","orders":10,"specId":27}],"id":27,"text":"网络"},{"options":[{"id":118,
"optionName":"16G","orders":1,"specId":32},{"id":119,"optionName":"32G","orders":2,"specId":32},
{"id":120,"optionName":"64G","orders":3,"specId":32},{"id":121,"optionName":"128G","orders":4,"specId":32}],"id":32,
"text":"机身内存"}]
json形式
数据库中的数据类型
由以上我们发现我们只需要把数据库中查询出来的spec_ids,由字符串转化成List<Map,再向其中加入一个键为options,值为map数据类型的集合即可
service层代码
public List<Map> findSpecAndOptionsByTypeTemplateId(Long typeTemplateId) {
TbTypeTemplate tbTypeTemplate = typeTemplateMapper.selectByPrimaryKey(typeTemplateId);
// List的格式:[{"id":26,"text":"尺码"},{"id":29,"text":"颜色"}]
List<Map> maps = JSON.parseArray(tbTypeTemplate.getSpecIds(), Map.class);
// map的格式:{"id":26,"text":"尺码"}
for (Map map : maps) {
TbSpecificationOptionExample example = new TbSpecificationOptionExample();
TbSpecificationOptionExample.Criteria criteria = example.createCriteria();
criteria.andSpecIdEqualTo(Long.parseLong(map.get("id")+""));
List<TbSpecificationOption> specificationOptions = specificationOptionMapper.selectByExample(example);
map.put("options",specificationOptions);
// map的新格式变为:{"id":26,"text":"尺码", "options": [{id: 24, optionName: ""56寸}]}
}
return maps;
}