项目业务需求:根据搜索框的文本,模糊匹配对应的数据集
写在前:
一:由于数据是花钱调用别人的接口,为了避免因修改数据格式报错,而导致重复消费。所以没对该接口做任何修改,先按部就班拿到数据再说。导致每一个体的对应数据都挤在一个 json 字符串中(每一个体对应的字符串都是 40+kb,个体量为五位数);
二:数据入库时,相关负责人并没有进行数据拆分,数据表就 id、对象名、数据字符串,三个字段(强烈吐槽);
三:正确的解决方法,应该是将该数据合理分表,方便以后的存取。但现在时间比较紧,所以先就这样处理吧(为了其中个别子段,去获取 40+kb 的数据…)。
处理思路:
本想用 mysql 中的 json 相关函数处理,毕竟能在数据库中处理最好。但项目用到的 mysql,版本问题,不支持。
那就将数据拿到后台再处理吧。
为了数据提取速度,加条件、加索引,总算不是太慢了。
代码1:
@Test
public void 测试(){
System.out.println("### begin");
Map map = new HashMap<>();
map.put("name", "搜索框的文本");
map.put("pageSize", 10);
map.put("pageIndex", 0);
List<Map> source = xxxService.xxx(map);
String jsonString = null;
Map m2 = new HashMap<>();
for (Map m: source){
jsonString= m.get("json字符串").toString();
m.remove("json字符串");// 只获取需要的数据,其余的舍弃
m2 = JsonPluginsUtil.jsonToMap(jsonString);
jsonString= m2.get("需要的list<Map>").toString();
JSONArray jsonArray = JSONArray.fromObject(jsonString);
List<Map> list = (List)jsonArray;
m2 = list.get(0);
// m.put("字段1", m2.get("字段1"));// 字段1
// m.put("字段2", m2.get("字段2"));// 字段2
// m.put("字段3", m2.get("字段3"));// 字段3
System.out.println("++++++++++++++++++++++++");
System.out.println("对象名:"+m2.get("对象名"));
System.out.println("字段1:"+m2.get("字段1"));
System.out.println("字段2:"+m2.get("字段2"));
System.out.println("字段3:"+m2.get("字段3"));
}
System.out.println("### end");
}
为了先实现功能,写的比较粗糙。
代码2:
@Test
public void 测试(){
System.out.println("### begin");
Map map = new HashMap<>();
map.put("name", "搜索框的文本");
map.put("pageSize", 10);
map.put("pageIndex", 0);
List<Map> source = xxxService.xxx(map);
String jsonString = null;
JSONObject jsonObject = new JSONObject();
for (Map m: source){
System.out.println("++++++++++++++++++++++++");
jsonString = m.get("json字符串").toString();
m.remove("json字符串");// 只获取需要的数据,其余的舍弃
jsonObject = JSONObject.fromObject(jsonString );
jsonString = jsonObject.getString("需要的list<Map>");
jsonString = jsonString .substring(1, jsonString .length()-1);// 去掉首尾的中括号 []
jsonObject = JSONObject.fromObject(jsonString );
System.out.println("对象名:"+jsonObject.getString("对象名"));
System.out.println("字段1:"+jsonObject.getString("字段1"));
System.out.println("字段2:"+jsonObject.getString("字段2"));
System.out.println("字段3:"+jsonObject.getString("字段3"));
}
System.out.println("### end");
}
待续 ……