目录
方式二:Json类的parseObject来解析json字符串
方式三:JSON类,指定解析类型,来解析JSON字符串(也可以转换为实体)
【不同实体给一个实体传值,用map做载体】
多个相似结构的类的属性值,调用一个统一的方法,作为参数传入,开始想想到要传递一个抽象的类,想到了泛型、反射。但是尝试过,泛型和反射,是实例化一个抽象的类,给这个类赋值。适用于
【后端多个具体类统一处理】
,例如:从excel统一导数据等操作。用泛型,更灵活。
所以想到了Map, 记得教程里说不知道数据的结构,就用map,此处,传入参数,如何用一个统一的数据接口表示?排除泛型,那么就是Map。
其实也可传递一个目标统一的类。作用等同于map。(讨论后想到的。)之前,传递的是自己,绕了一圈,决定传递之前就转为【
统一的目标类】。但是这个转化的过程在每次调用接口方法前都要做同样的事情,转为Map能节省代码,接口接收后针对性地针对某些key的value和目标类对应,代码量更好,更灵活。
当然饶了一圈,也理解了各种知识的应用场景,顺便理解了一些应用的实现。
传入之前的类转化为 Map<String, Object>,传入后,取出某个Key,这和json解析相似,只是这里是解析map,预先知道数据中包含了某个key.
---【类转为map】
Map<String, Object> cond=new HashMap<String, Object>();
cond.put("jCategory", "ddd");
cond.put("yid", "2");
infoSyslogService.insertInfoSysLog("修改",cond);
传入后
---【解析map的某个key】
public void insertInfoSysLog(String className,Map<String, Object> variables) throws Exception {
String str = variables.get("yid").toString();
System.out.println("接口实现中---"+str);
}
另外:
【前端给后端传对象】
---【json转map】
String str={"Result":"true","ErrorId":10000,"ErrorMsg":"",
"Data":{"list":{"0215V146":{"price":"3.000","store":0},"0215X512":{"price":"14.000","store":20}}}}
方式一:
Json类解析Json字符串
Map maps = (Map) JSON.parse(str);
获取key=Data的Value
String value = maps.get("Data");
方式二:
Json类的parseObject来解析json字符串
Map maps= JSON.parseObject(str);
方式三:
JSON类,指定解析类型,来解析JSON字符串(也可以转换为实体)
Map maps= JSON.parseObject(str,Map.class);
方式四:
1、Map maps = (Map) JSONObjec.parse(str);
2、Map maps= JSONObjec.parseObject(str);
3、Map maps= JSONObjec.parseObject(str,Map.class);
---【json转实体】
JSON字符串:{"id":"12346","name":"测试"}
实体:public class Goods {private String id;private String name;getter and setter 省略}
注意:实体属性必须要严格对应JSON字符串里边的key!
private String id;
【map 的object转实体】
在用SpringBoot写controller的时候,需要接受一个map的Object,之后要把Object转为特定的类,需要通过json来作为中间介质:
public boolean postArticle(@RequestBody Map<String, Object> map) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
String jsonInfo = objectMapper.writeValueAsString(map.get("articleInfo"));
String jsonContent = objectMapper.writeValueAsString(map.get("articleContent"));
ArticleInfo articleInfo = objectMapper.readValue(jsonInfo,ArticleInfo.class);
ArticleContent articleContent = objectMapper.readValue(jsonContent,ArticleContent.class);
System.out.println(articleContent + " " +articleInfo);
return articleService.insertArticle(articleInfo,articleContent);
}
【Map转Json字符串】
Map<String, Object> params = new HashMap<String, Object>();
params.put("pageSize", 100);
params.put("page", 1);
params.put("sn", 1119785570);
params.put("name", "sali");
String data = String.format("data=%s", JSONObject.toJSONString(params));