当前位置: 首页 > news >正文

用数据库添加文章wordpress谷歌网站关键词优化

用数据库添加文章wordpress,谷歌网站关键词优化,简述什么是虚拟主机,深圳黑马品牌网站设计本文介绍json的规范及javascript和java对数据的交换读取 1. json介绍1.1 json简介1.2为什么使用 JSON#xff1f; 2. json规范2.1基础规范2.2 key值为-字符串、数字、布尔值2.3 key值为对象Object2.4 key值为数组2.5 json本身就是一个数组 3.javascript操作json3.1 javascript… 本文介绍json的规范及javascript和java对数据的交换读取 1. json介绍1.1 json简介1.2为什么使用 JSON 2. json规范2.1基础规范2.2 key值为-字符串、数字、布尔值2.3 key值为对象Object2.4 key值为数组2.5 json本身就是一个数组 3.javascript操作json3.1 javascript操作json对象3.2 js操作json字符串,把字符串转化为json对象3.3 键值为null或者键不存在判断3.4json对象转字符串 4.java操作json4.1准备两个比较全面的VO类4.1 FastJson介绍4.1.1引入依赖4.1.2 vo基础解析4.1.3 把null的字段全部传递过来值显示为null4.1.4 字符串类型的null处理成4.1.5 数字、布尔、数组/list、日期null处理4.1.5 把null全部转化成4.1.6日期转换4.1.7 map处理4.1.8 list处理4.1.9 总结4.1.10 json转java对象 4.2 Gson介绍4.2.1引入依赖4.2.2 vo基础解析4.2.3 把值为null的传递出去4.2.4 toJson支持对象所有属性转化4.2.5处理null-空值4.2.6 日期处理4.2.7 list和 map处理4.2.8 JSON转java对象 4.3 Jackson介绍4.3.1引入依赖4.3.2 vo基础解析4.3.3全局配置4.3.4 支持vo里所有复杂属性的转化4.4.5 把null全部转化成4.4.6日期处理4.4.7 list处理4.4.8 map处理4.3.9 json转vo 4.4解析总结4.5调调用第三方接口json解析 1. json介绍 1.1 json简介 JSONJavaScript Object Notation, JS对象简谱是一种轻量级的数据交换格式。 它基于 ECMAScriptEuropean Computer Manufacturers Association, 欧洲计算机协会制定的js规范的一个子集采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写同时也易于机器解析和生成并有效地提升网络传输效率。 1.2为什么使用 JSON 对于 AJAX 应用程序来说JSON 比 XML 更快更易使用 使用 XML 读取 XML 文档使用 XML DOM 来循环遍历文档读取值并存储在变量中 使用 JSON 读取 JSON 字符串用 eval() 处理 JSON 字符串 2. json规范 2.1基础规范 eg: { name:蒋增奎,address:天府大道,age:30, isMoney:true }规范说明 json内容需要用花括号{}包裹起来键值对用:间隔多个键中间用逗号隔离最后一个键不需要逗号键key如果没有特殊符号可以不用双引号包围。值的类型包括字符串、数字、布尔值、对象、数组五种类型前三种最常见 key可以不需要双引号如 2.2 key值为-字符串、数字、布尔值 { name:蒋增奎,address:天府大道,age:30, isMoney:true }2.3 key值为对象Object 嵌套就是json对象里面又包含对象key对应的值除了括字符串、数字、布尔值三种类型外还可以是一个对象其规范是 key:{对象属性} var obj4 {name: 雪邦科技,boss: {name: 蒋增奎--,age: 40,},};2.4 key值为数组 数组用方括号包围一起来[x1,x2,x3],分组之间用逗号隔离 数组值有两种类型 1.基本类型:如[1,2,3] 2.json对象json对象要用{}包裹 //---------------------------------------------var obj2{wifes: [冰冰, 雅致], //基础类型对应后端是一个基础类型的数组或者listuser:[ //是一个对象对应后都是一个对象的数组或者List{name:jzk,sex:20},{name:jj,sex:30},],address:[{shen:云南,city:昆明},{shen:四川,city:雅安},]}; //---------------------------------------------var obj3{name:雪邦科技,address:天府大道, employees: [{ firstName:Bill , lastName:Gates },{ firstName:George , lastName:Bush },{ firstName:Thomas , lastName:Carter } ] }2.5 json本身就是一个数组 有两种类型 1.基本类型数组:[3,2,1] 2.对象的数组:[{x1},{x2},{x3},] 对象要用{}包括 var obj1[{name:蒋增奎,address:天府大道,sex:30},{name:奎奎,address:大道,sex:38},];var obj2[1,2,3];3.javascript操作json 语法 把json赋值一个给一本变量通过变量直接用对象名.key就可以读取如果是数组则可以循环obj[i]读取如果key值为对象直接用对象名.key.属性读取如果要修改值直接用对象名.keyxxx则可以修改 3.1 javascript操作json对象 eg: scriptfunction dd() {//1.基本属性读取var obj {name: 蒋增奎1,address: 天府大道,sex: 30,exist: true,};alert(obj.name);obj.name jzk; //改变属性值//2.key值为对象var obj4 {name: 雪邦科技,boss: {name: 蒋增奎--,age: 40,},};alert(obj4.boss.name obj4.boss.name);//3.json本身是一个数组var obj1 [{ name: 蒋增奎, address: 天府大道, sex: 30 },{ name: 奎奎, address: 大道, sex: 38 },];//循环读取for (index in obj1) {alert(数组[ index ] obj1[index].name - obj1[index].address - obj1[index].sex);}//4.key值是一个数组var company {name: 雪邦,address: 天府大道1号,boss: 蒋增奎,exist: true,tax: 5000,users: [{ name: 蒋增奎, sex: 男, mobile: 13688006645 },{ name: 张三, sex: 女, mobile: 13688006640 },],};var users company.users;for (index in users) {alert(company.users数组[ index ] users[index].name - users[index].mobile - users[index].sex);}}/script3.2 js操作json字符串,把字符串转化为json对象 有两种写法 1JSON.parse(字符串) 2 eval (“(” txt “)”); eg: scriptfunction dd() {//1.eval((json字符串))语法转换成json对象var s {name:蒋增奎,address:天府大道,sex:30};s ( s );var obj5 eval(s);alert(obj5.sex);// 2.JSON.parse(json字符串)语法转换成json对象var txt { sites : [ { name:菜鸟教程 , url:www.runoob.com }, { name:google , url:www.google.com }, { name:微博 , url:www.weibo.com } ]};var obj6 JSON.parse(txt);alert(obj6.sites[0].name);}/script3.3 键值为null或者键不存在判断 如果键值为null.可以直接用obj.sex null判断 如果键不存在用typeof obj.deptId undefined判断 function dd2() {var obj {name: 蒋增奎1,address: 天府大道,sex: null,exist: true,deptId: 3,};//如果获取得一个键key本身不存在if (!obj.deptId) {alert(不存在obj.deptId);}if (obj.deptId null) {alert(不存在obj.deptId);}alert(obj.deptId);//存在key,但值为nullif (!obj.sex) {alert(不存在obj.sex);}//存在key,但值为nullif (obj.sex null) {alert(obj.sexnull);}alert(obj.sex);//通过typeof可以判断出是否是null还是key不存在if (typeof obj.deptId undefined) {alert(keydeptId不存在);}//排除掉无key和key值为nullif (typeof obj.deptId ! undefined obj.deptId) {alert(keydeptId存在并且值不为null);}} 3.4json对象转字符串 var strJSON.stringify(json对象) function dd1() {var obj { name: runoob, alexa: 10000, site: www.runoob.com };var JSONStr JSON.stringify(obj);alert(JSONStr);}4.java操作json Java中并没有内置JSON的解析因此使用JSON需要借助第三方类库。 下面是几个常用的 JSON 解析类库 Gson: 谷歌开发的 JSON 库功能十分全面。FastJson: 阿里巴巴开发的 JSON 库性能十分优秀。Jackson: 社区十分活跃且更新速度很快。,springMVC默认 4.1准备两个比较全面的VO类 Data NoArgsConstructor AllArgsConstructor public class JsonVO {private Long id;private String name;private BigDecimal weight;//年纪private Date birth;private Date creatTime;private Boolean money;private Address address;private ListAddress addresses;private MapString,Object son;private String[] wifes; }Data NoArgsConstructor AllArgsConstructor public class Address {private String shen;private String city; }4.1 FastJson介绍 4.1.1引入依赖 dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.47/version/dependency4.1.2 vo基础解析 最基础直接调用JSON.toJSONString(vo); /** * 问题 * 1.vo对象属性为null不会传递 * 2.日期转化成时间戳数字 * */ Testpublic void test2(){//--------------vo转json-------------JsonVO vonew JsonVO();vo.setId(1l);vo.setBirth(new Date());String jsonString JSON.toJSONString(vo);System.out.println(只传vo对象:jsonString);} 打印效果 只传vo对象:{birth:1701706009427,id:1}4.1.3 把null的字段全部传递过来值显示为null 传入参数SerializerFeature.WriteMapNullValue 问题前端需要去处理null Testpublic void test3(){JsonVO vonew JsonVO();vo.setId(1l);vo.setBirth(new Date());String jsonString ;jsonString JSON.toJSONString(vo,SerializerFeature.WriteMapNullValue);System.out.println(jsonString);}效果 {addresses:null,birth:1701707310898,creatTime:null,id:1, money:null,name:null,weight:null}4.1.4 字符串类型的null处理成 null的字符串类型能传递并转化成 问题 1.日期和自定义对象依然显示为nul 2.数组、list、数字、boolean无法传递 Testpublic void test4(){JsonVO vonew JsonVO();vo.setId(1l);vo.setBirth(new Date());String jsonString ;jsonString JSON.toJSONString(vo,SerializerFeature.WriteNullStringAsEmpty //字符串为null的转化为);System.out.println(jsonString);}效果 {address:null,birth:1701708039585,creatTime:null,id:1,name:}4.1.5 数字、布尔、数组/list、日期null处理 SerializerFeature.WriteNullStringAsEmpty, //字符串为null的转化为 SerializerFeature.WriteNullNumberAsZero, //数字为null转化为0 SerializerFeature.WriteNullListAsEmpty, //数组、list为null的转化成[] SerializerFeature.WriteNullBooleanAsFalse,//布尔值为null转化成false SerializerFeature.WriteDateUseDateFormat //日期把时间戳格式化 问题 1.日期、自定义的对象依然为null 2.如果数字0和布尔值false有意义前端区分不出来 3.日期区分不出来是时间还是日期 Testpublic void test5(){JsonVO vonew JsonVO();vo.setId(1l);vo.setBirth(new Date());String jsonString ;jsonString JSON.toJSONString(vo,SerializerFeature.WriteNullStringAsEmpty, //字符串为null的转化为SerializerFeature.WriteNullNumberAsZero, //数字为null转化为0SerializerFeature.WriteNullListAsEmpty, //数组、list为null的转化成[]SerializerFeature.WriteNullBooleanAsFalse,//布尔值为null转化成falseSerializerFeature.WriteDateUseDateFormat //日期把时间戳格式化);System.out.println(jsonString);} 效果 {address:null,addresses:[],birth:2023-12-05 00:51:55, creatTime:null,id:1,money:false,name:,weight:0}4.1.5 把null全部转化成 重写过滤器拦截null的全部置换成 问题 1.前端如果有数字计算要去转化 2.如果自定义对象数组等需要先判断再做相关操作 过滤器 public class JsonUtil {/*** 过滤器把null全部转化成空字符串* return*/public static ValueFilter getFilter(){ValueFilter filter new ValueFilter() {Overridepublic Object process(Object obj, String s, Object v) {// System.out.println(s);if(vnull)return ;return v;}};return filter;} }解析 { address:,addresses:,birth:1701709403555,creatTime:,id:1, money:,name:,weight: }4.1.6日期转换 采用注解的方式可以解析出日期和时间两种,此方法最完美 在日期变量属性上加 JSONField(format“yyyy-MM-dd”)或者 JSONField(format“yyyy-MM-dd HH:mm:ss”) vo Data NoArgsConstructor AllArgsConstructor public class JsonVO {private Long id;private String name;private BigDecimal weight;//年纪JSONField(formatyyyy-MM-dd)private Date birth;JSONField(formatyyyy-MM-dd HH:mm:ss)private Date creatTime;private Boolean money;private Address address;private ListAddress addresses;}测试 Testpublic void test7(){JsonVO vonew JsonVO();vo.setId(1l);vo.setBirth(new Date());vo.setCreatTime(new Date());String jsonString ;jsonString JSON.toJSONString(vo);System.out.println(jsonString);} 效果 {birth:2023-12-05,creatTime:2023-12-05 01:07:51,id:1}4.1.7 map处理 TestTestpublic void test8(){MapString,Object mapnew HashMapString,Object();map.put(name,jzk);map.put(id,1);map.put(sex,null);String jsonString ;jsonString JSON.toJSONString(map,JsonUtil.getFilter());System.out.println(jsonString);}效果 {sex:,name:jzk,id:1} 4.1.8 list处理 不需要特殊处理 Testpublic void test9(){ListAddress listnew ArrayList();list.add(new Address(四川,成都));list.add(new Address(四川,简阳));list.add(new Address());String jsonString ;jsonString JSON.toJSONString(list,JsonUtil.getFilter());System.out.println(jsonString);}效果: [{city:成都,shen:四川},{city:简阳,shen:四川},{city:,shen:}]4.1.9 总结 用过滤器还是最简单 4.1.10 json转java对象 采用语法VO voJSON.parseObject(jsonStr,VO.class); 如果key是,其他对象可以转化成null 这里有两个特殊的 数组转化成list 要用JSON.parseArray来转化JSONArray 本身也是一个数组 2.数组转化成map 方法说明SON.parseObject(jsonStgr,映射类.class);json和一个类对应不管这个vo类里属性有多复杂都能映射上MapString,Object mapJSON.parseObject(jsonStgr,Map.class);和map对象的映射JSONArray jsonArray JSONArray.parseArray(jsonStgr);返回一个数组json本身也是一个数组List VO listJSON.parseArray(jsonStgr,VO.class);映射到一个List VO 列表里 Testpublic void test33(){String txt{address:,addresses:,birth:2023-12-05,creatTime:,id:1,money:,name:,weight:};JsonVO vo JSON.parseObject(txt,JsonVO.class);System.out.println(vo);//json有但vo没有的字段不报错//waihao这个属性vo对象里没有txt{name:jzk,waihao:李富贵};vo JSON.parseObject(txt,JsonVO.class);System.out.println(vo);//自定义对象txt{address:{city:cd,shen:sc},addresses:,birth:2023-12-05,creatTime:,id:1,money:,name:,weight:};vo JSON.parseObject(txt,JsonVO.class);//数组txt{address:,addresses:[{city:cd,shen:sc},{city:my,shen:sc}],birth:2023-12-05,creatTime:,id:1,money:,name:,weight:};vo JSON.parseObject(txt,JsonVO.class);System.out.println(vo);//数组txt{address:,addresses:[{city:cd,shen:sc},{city:my,shen:sc}],birth:2023-12-05,creatTime:,id:1,money:,name:,weight:};vo JSON.parseObject(txt,JsonVO.class);System.out.println(vo);//-------------------特殊数据类型---------------------//纯数组转listtxt[{city:成都,shen:四川},{city:简阳,shen:四川},{city:,shen:}];ListAddress listJSON.parseArray(txt,Address.class);for (Address a:list){System.out.println(a);}//数组转数组数组转数组没有直接方法需要用JSONArray来过渡System.out.println(数组转数组);txt[{city:成都,shen:四川},{city:简阳,shen:四川},{city:,shen:}];JSONArray jsonArray JSONArray.parseArray(txt);Address[] ssnew Address[jsonArray.size()];for(int i0;ijsonArray.size();i){Address addressjsonArray.getObject(i,Address.class);ss[i]address;}for (Address address:ss){System.out.println(address);}//str转maptxt{city:成都,shen:四川};MapString,Object mapJSON.parseObject(txt,Map.class);for(String key:map.keySet()){String value map.get(key).toString();System.out.println(keykey vlauevalue);}}4.2 Gson介绍 4.2.1引入依赖 dependencygroupIdcom.google.code.gson/groupIdartifactIdgson/artifactIdversion2.8.5/version/dependency/dependencies4.2.2 vo基础解析 最基础直接调 Gson gson new Gson(); String jsonStrgson.toJson(vo,JsonVO.class); /** * 问题 * 1.vo对象属性为null不会传递 * 2.日期转化成没有格式化 * */ Testpublic void t1(){Gson gson new Gson();JsonVO vonew JsonVO();vo.setName(jzk);vo.setBirth(new Date());String jsonStrgson.toJson(vo,JsonVO.class);System.out.println(jsonStr);} 效果 {name:jzk,birth:Dec 6, 2023 9:51:56 PM}4.2.3 把值为null的传递出去 这里是GsonBuilder来创建Gson对象 Gson gson new GsonBuilder().serializeNulls().create(); 这样获得全部null Testpublic void t2(){Gson gson new GsonBuilder().serializeNulls().create();JsonVO vonew JsonVO();// vo.setName(jzk);vo.setId(2l);vo.setBirth(new Date());String jsonStrgson.toJson(vo,JsonVO.class);System.out.println(jsonStr);}效果 { id:2,name:null,weight:null,birth:Dec 6, 2023 9:54:19 PM, creatTime:null,money:null,address:null, addresses:null,son:null,wifes:null } 4.2.4 toJson支持对象所有属性转化 public JsonVO getAllVo(){JsonVO vonew JsonVO();vo.setName(jzk);vo.setBirth(new Date());vo.setId(1l);vo.setCreatTime(new Date());vo.setMoney(true);vo.setWeight(new BigDecimal(20.56));vo.setAddress(new Address(四川,成都));ListAddress listnew ArrayListAddress();list.add(new Address(四川,绵阳));list.add(new Address(四川,简阳));vo.setAddresses(list);MapString,Object sonnew HashMap();son.put(name,将填好);son.put(sex,1);vo.setSon(son);vo.setWifes(new String[]{冰冰,雅致});return vo;}Testpublic void t3(){Gson gson new Gson();JsonVO vogetAllVo();String jsonStrgson.toJson(vo,JsonVO.class);System.out.println(jsonStr);} 效果 { id:1,name:jzk,weight:20.56,birth:Dec 6, 2023 9:57:35 PM, creatTime:Dec 6, 2023 9:57:35 PM,money:true, address:{shen:四川,city:成都}, addresses: [ {shen:四川,city:绵阳},{shen:四川,city:简阳} ], son:{sex:1,name:将填好}, wifes:[冰冰,雅致] } 4.2.5处理null-空值 GsonBuilder.registerTypeAdapter注册进行重写 帮助类 public class GsonUtil {public static Gson getGson(){Gson gson new GsonBuilder().serializeNulls() //null全部显示.registerTypeAdapter(String.class,new StringAdapter()) //空字符串处理.registerTypeAdapter(Long.class,new LongAdapter()) //Long字段处理成.registerTypeAdapter(Integer.class,new IntegerAdapter()) //Integer.registerTypeAdapter(BigDecimal.class,new BigDecimalAdapter()) //BigDecimal.registerTypeAdapter(Date.class,new DateAdapter()) //Date.registerTypeAdapter(Boolean.class,new BooleanAdapter())//Boolean.create();return gson;}/*** 字符串为*/public static class StringAdapter extends TypeAdapterString {Overridepublic void write(JsonWriter jsonWriter, String s) throws IOException {if (s null) {//序列化使用的是adapter的write方法//jsonWriter.nullValue();//这个方法是错的而是应该将null转成jsonWriter.value();return;}jsonWriter.value(s);}Overridepublic String read(JsonReader jsonReader) throws IOException {if (jsonReader.peek() JsonToken.NULL) {//反序列化使用的是read方法jsonReader.nextNull();return null;}return jsonReader.nextString();}}/*** Long null为*/public static class LongAdapter extends TypeAdapterLong {Overridepublic void write(JsonWriter jsonWriter, Long s) throws IOException {if (s null) {//序列化使用的是adapter的write方法//jsonWriter.nullValue();//这个方法是错的而是应该将null转成jsonWriter.value();return;}jsonWriter.value(s);}Overridepublic Long read(JsonReader jsonReader) throws IOException {if (jsonReader.peek() JsonToken.NULL) {//反序列化使用的是read方法jsonReader.nextNull();return null;}return jsonReader.nextLong();}}/*** Double*/public static class DoubleAdapter extends TypeAdapterDouble {Overridepublic void write(JsonWriter jsonWriter, Double s) throws IOException {if (s null) {//序列化使用的是adapter的write方法//jsonWriter.nullValue();//这个方法是错的而是应该将null转成jsonWriter.value();return;}jsonWriter.value(s);}Overridepublic Double read(JsonReader jsonReader) throws IOException {if (jsonReader.peek() JsonToken.NULL) {//反序列化使用的是read方法jsonReader.nextNull();return null;}return jsonReader.nextDouble();}}/*** Boolean*/public static class BooleanAdapter extends TypeAdapterBoolean {Overridepublic void write(JsonWriter jsonWriter, Boolean s) throws IOException {if (s null) {//序列化使用的是adapter的write方法//jsonWriter.nullValue();//这个方法是错的而是应该将null转成jsonWriter.value();return;}jsonWriter.value(s);}Overridepublic Boolean read(JsonReader jsonReader) throws IOException {if (jsonReader.peek() JsonToken.NULL) {//反序列化使用的是read方法jsonReader.nextNull();return null;}return jsonReader.nextBoolean();}}/*** BigDecimal*/public static class BigDecimalAdapter extends TypeAdapterBigDecimal {Overridepublic void write(JsonWriter jsonWriter, BigDecimal s) throws IOException {if (s null) {//序列化使用的是adapter的write方法//jsonWriter.nullValue();//这个方法是错的而是应该将null转成jsonWriter.value();return;}jsonWriter.value(s);}Overridepublic BigDecimal read(JsonReader jsonReader) throws IOException {if (jsonReader.peek() JsonToken.NULL) {//反序列化使用的是read方法jsonReader.nextNull();return null;}return new BigDecimal(jsonReader.nextString());}}/*** Integer*/public static class IntegerAdapter extends TypeAdapterInteger {Overridepublic void write(JsonWriter jsonWriter, Integer s) throws IOException {if (s null) {//序列化使用的是adapter的write方法//jsonWriter.nullValue();//这个方法是错的而是应该将null转成jsonWriter.value();return;}jsonWriter.value(s);}Overridepublic Integer read(JsonReader jsonReader) throws IOException {if (jsonReader.peek() JsonToken.NULL) {//反序列化使用的是read方法jsonReader.nextNull();return null;}return jsonReader.nextInt();}}/*** Integer*/public static class DateAdapter extends TypeAdapterDate {Overridepublic void write(JsonWriter jsonWriter, Date s) throws IOException {if (s null) {//序列化使用的是adapter的write方法//jsonWriter.nullValue();//这个方法是错的而是应该将null转成jsonWriter.value();return;}String tempgetStrByDate(s,yyy-MM-dd HH:mm:ss);if(temp.indexOf(00:00:00)!-1){temptemp.substring(0,temp.indexOf(00:00:00));temp temp.trim();}jsonWriter.value(temp);}Overridepublic Date read(JsonReader jsonReader) throws IOException {if (jsonReader.peek() JsonToken.NULL) {//反序列化使用的是read方法jsonReader.nextNull();return null;}// return jsonReader.nextString();System.out.println(jsonReader.nextString()jsonReader.nextString());return getDateByStr(jsonReader.nextString(),yyy-MM-dd HH:mm:ss);}}private static String getStrByDate(Date date,String gs){if(datenull)return ;DateFormat df new SimpleDateFormat(gs);return df.format(date);}private static Date getDateByStr(String dateStr,String gs){if(dateStrnull || dateStr.trim().length()0)return null;DateFormat df new SimpleDateFormat(gs);try{return df.parse(dateStr);}catch(ParseException e){throw new RuntimeException(日期转换出错:e);}}}代码 Testpublic void t4(){Gson gson GsonUtil.getGson();//然后用上面一行写的gson来序列化和反序列化实体类typeJsonVO vonew JsonVO();// vo.setName(jzk);// vo.setId(2l);//设置一个没有时间的日期vo.setBirth(DateUtil.getDateByStr(2022-10-01,DateUtil.date_gs));String jsonStrgson.toJson(vo,JsonVO.class);System.out.println(jsonStr);}效果 {id:,name:,weight:,birth:2022-10-01, creatTime:,money:,address:null,addresses:null, son:null,wifes:null,birth2:null}4.2.6 日期处理 有三种方式 1.GsonBuilder…setDateFormat(“yyyy-MM-dd HH:mm:ss”) //设置日期转换 问题对象里的所有日期只能用一种格式 2.自定义一个类日期属性的注解【如FastJson,Gson没有自带日期注解】 3.做一个TypeAdapter的实现类自己写看上文GsonUtil.java里面的代码 Testpublic void t6(){//通过setDateFormat来设置日期格式问题所有数据都设置成了一种格式//gson没有提供注解可以自定义一个注解处理VO对象里有日期和时间两个字段Gson gson new GsonBuilder().setDateFormat(yyyy-MM-dd HH:mm:ss) //设置日期转换.create();JsonVO vonew JsonVO();// vo.setName(jzk);// vo.setId(2l);vo.setBirth(new Date());vo.setCreatTime(new Date());String jsonStrgson.toJson(vo,JsonVO.class);System.out.println(jsonStr);}效果 {birth:2023-12-06 23:57:12,creatTime:2023-12-06 23:57:12}4.2.7 list和 map处理 gson.toJson(list,ArrayList.class); gson.toJson(map,HashMap.class); Testpublic void t33(){Gson gson new Gson();ListAddress listnew ArrayListAddress();list.add(new Address(四川,绵阳));list.add(new Address(四川,简阳));String jsonStrgson.toJson(list,ArrayList.class);System.out.println(jsonStr);MapString,Object mapnew HashMap();map.put(name,jzk);map.put(address,天赋达到);jsonStrgson.toJson(map,HashMap.class);System.out.println(jsonStr);} 效果 [{shen:四川,city:绵阳},{shen:四川,city:简阳}] {address:天赋达到,name:jzk}4.2.8 JSON转java对象 1.json转vo对象 JsonVO vonew Gson().fromJson(jsonStr,JsonVO.class); 2.json转list vo Type type new TypeTokenList Address(){}.getType();//获取转化类型 List Address listnew Gson().fromJson(json,type) 3.json转map MapString,String map new Gson().fromJson(json, Map.class); Testpublic void toVo(){//有null的数据String json{id:2,name:null,weight:null,birth:2023-10-23,creatTime:null,money:null,address:null,addresses:null,son:null,wifes:null};JsonVO vonew Gson().fromJson(json,JsonVO.class);System.out.println(vo);//所有数据都有值 json{id:1,name:jzk,weight:20.56,birth:2021-10-11,creatTime:2023-10-01 12:23:23,money:true,address:{shen:四川,city:成都},addresses:[{shen:四川,city:绵阳},{shen:四川,city:简阳}],son:{sex:1,name:将填好},wifes:[冰冰,雅致]};vo new Gson().fromJson(json,JsonVO.class);System.out.println(vo);//json有vo对象没有字段不报错json{id:2,waihao:黑旋风}; //waihao这个属性vo没有vonew Gson().fromJson(json,JsonVO.class);System.out.println(vo);//纯List转换json[{shen:四川,city:绵阳},{shen:四川,city:简阳}];Type type new TypeTokenListAddress(){}.getType();//获取转化类型ListAddress listnew Gson().fromJson(json,type);for(Address a:list){System.out.println(a);}//map转换json{shen:四川,city:绵阳};MapString,String map new Gson().fromJson(json, Map.class);for(String key:map.keySet()){String value map.get(key).toString();System.out.println(keykey vlauevalue);}} 4.3 Jackson介绍 4.3.1引入依赖 dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.1/version/dependency4.3.2 vo基础解析 String strnew ObjectMapper()…writeValueAsString(解析对象); 问题 1.全部null都会传递过来 2.时间展示是时间戳格式 Testpublic void t1() throws JsonProcessingException {JsonVO vonew JsonVO();vo.setId(2l);vo.setBirth(new Date());ObjectMapper mappernew ObjectMapper();String jsonStr;jsonStrmapper.writeValueAsString(vo);System.out.println(jsonStr);}效果 {id:2,name:null,weight:null,birth:1701912127118,creatTime:null, money:null,address:null,addresses:null,son:null, wifes:null,birth2:null} 4.3.3全局配置 //在反序列化时忽略在 json 中存在但 Java 对象不存在的属性 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //在序列化时日期格式默认为 yyyy-MM-dd’T’HH:mm:ss.SSSZ mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //在序列化时自定义时间日期格式 mapper.setDateFormat(new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”)); //在序列化时忽略值为 null 的属性 mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //在序列化时忽略值为默认值的属性 mapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_DEFAULT); //在反序列时配置允许单引号否则json里面的单引号如 ‘name’:jzk’会报错 mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); //输出json格式化调试的时候可使用增加易读性 mapper.writerWithDefaultPrettyPrinter() 4.3.4 支持vo里所有复杂属性的转化 Testpublic void t2()throws JsonProcessingException {ObjectMapper mappernew ObjectMapper();JsonVO vogetAllVo();String jsonStr;jsonStrmapper.writerWithDefaultPrettyPrinter().writeValueAsString(vo);System.out.println(jsonStr);}public JsonVO getAllVo(){JsonVO vonew JsonVO();vo.setName(jzk);vo.setBirth(new Date());vo.setId(1l);vo.setCreatTime(new Date());vo.setMoney(true);vo.setWeight(new BigDecimal(20.56));vo.setAddress(new Address(四川,成都));ListAddress listnew ArrayListAddress();list.add(new Address(四川,绵阳));list.add(new Address(四川,简阳));vo.setAddresses(list);MapString,Object sonnew HashMap();son.put(name,将填好);son.put(sex,1);vo.setSon(son);vo.setWifes(new String[]{冰冰,雅致});vo.setBirth2(java.sql.Date.valueOf(2012-10-01));return vo;}效果 {id : 1,name : jzk,weight : 20.56,birth : 1701917471582,creatTime : 1701917471582,money : true,address : {shen : 四川,city : 成都},addresses : [ {shen : 四川,city : 绵阳}, {shen : 四川,city : 简阳} ],son : {sex : 1,name : 将填好},wifes : [ 冰冰, 雅致 ],birth2 : 1349020800000 }4.4.5 把null全部转化成 重写setNullValueSerializer()方法 Testpublic void t4() throws JsonProcessingException {ObjectMapper mappernew ObjectMapper();mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializerObject() {Overridepublic void serialize(Object paramT,JsonGenerator paramJsonGenerator, SerializerProvider paramSerializerProvider) throws IOException, JsonProcessingException {paramJsonGenerator.writeString();}});JsonVO vonew JsonVO();vo.setId(2l);vo.setBirth(new Date());String jsonStr;jsonStrmapper.writerWithDefaultPrettyPrinter().writeValueAsString(vo);System.out.println(jsonStr);}效果 {id : 2,name : dddddd,weight : ,birth : 1701917789597,creatTime : ,money : ,address : ,addresses : ,son : ,wifes : ,birth2 : }4.4.6日期处理 日期处理有两种方式 1.在对象属性上配置注解 JsonFormat(timezone “GMT8”, pattern “yyyy-MM-dd”) JsonFormat(timezone “GMT8”, pattern “yyyy-MM-dd HH:mm:ss”) 2.jackson配置类上使用 mapper.setDateFormat(new SimpleDateFormat(“yyyy-MM-dd”)); 因为注解大于配置如果yyyy-MM-dd比较多setDateFormat配置yyyy-MM-dd注解只使用带时分秒的。 省略掉配置日期的注解 代码 vo ublic class JsonVO {private Long id;private String nameprivate BigDecimal weight;//年纪JsonFormat(timezone GMT8, pattern yyyy-MM-dd)private Date birth;JsonFormat(timezone GMT8, pattern yyyy-MM-dd HH:mm:ss)private Date creatTime;解析 public void t5() throws JsonProcessingException {ObjectMapper mappernew ObjectMapper();//在序列化时自定义时间日期格式mapper.setDateFormat(new SimpleDateFormat(yyyy-MM-dd));JsonVO vonew JsonVO();vo.setId(2l);vo.setBirth(new Date());vo.setBirth2(java.sql.Date.valueOf(2012-12-01));vo.setCreatTime(new Date());String jsonStr;jsonStrmapper.writerWithDefaultPrettyPrinter().writeValueAsString(vo);System.out.println(jsonStr); } 效果 {id : 2,name : dddddd,weight : null,birth : 2023-12-07,creatTime : 2023-12-07 11:54:14,money : null,address : null,addresses : null,son : null,wifes : null,birth2 : 2012-12-01 }4.4.7 list处理 默认支持list参数 Testpublic void t6() throws JsonProcessingException {ObjectMapper mapper new ObjectMapper();ListAddress listnew ArrayList();list.add(new Address(四川,成都));list.add(new Address(四川,简阳));list.add(new Address());String jsonInString mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list);System.out.println(jsonInString);}效果 [ {shen : 四川,city : 成都 }, {shen : 四川,city : 简阳 }, {shen : null,city : null } ]4.4.8 map处理 默认支持map Testpublic void t7() throws JsonProcessingException {ObjectMapper mapper new ObjectMapper();MapString,Object mapnew HashMap();map.put(address,天府大道);map.put(name,张三丰);String jsonInString mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);System.out.println(jsonInString);}效果 {address : 天府大道,name : 张三丰 }4.3.9 json转vo 注意事项 1.假如json是单引号 ALLOW_SINGLE_QUOTEStrue 2.假如json 中存在但 Java 对象不存在的属性 FAIL_ON_UNKNOWN_PROPERTIESfalse 否则前两者要报错 3.json转list和map需要使用constructCollectionType、constructMapType构造器注意对应的class Testpublic void t8() throws IOException {ObjectMapper mapper new ObjectMapper();//允许json用单引号不是双引号mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);//在反序列化时忽略在 json 中存在但 Java 对象不存在的属性mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//1.vo部分有值 okJsonVO vonew JsonVO();String jsonStr;jsonStr{id:2,name:蒋增奎};vomapper.readValue(jsonStr,JsonVO.class);System.out.println(vo);//2.vo全部有值 okjsonStr{\id\:1,\name\:\jzk\,\weight\:20.56,\birth\:\2023-12-07\,\creatTime\:\2023-12-07 13:44:17\,\money\:true,\address\:{\shen\:\四川\,\city\:\成都\},\addresses\:[{\shen\:\四川\,\city\:\绵阳\},{\shen\:\四川\,\city\:\简阳\}],\son\:{\sex\:\1\,\name\:\将填好\},\wifes\:[\冰冰\,\雅致\],\birth2\:\2023-12-07\};vomapper.readValue(jsonStr,JsonVO.class);System.out.println(vo);//3.json有但vo里没有对应属性,要使用// mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//引号允许// mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);jsonStr{id:2,name:蒋增奎,waihao:带头大哥};vomapper.readValue(jsonStr,JsonVO.class);System.out.println(vo);//4.直接转化成list//必须获得一个CollectionType注入vo.classCollectionType javaType mapper.getTypeFactory().constructCollectionType(List.class, Address.class);jsonStr[{\shen\:\四川\,\city\:\成都\},{\shen\:\四川\,\city\:\简阳\},{\shen\:null,\city\:null}];ListAddress listmapper.readValue(jsonStr,javaType);System.out.println(list start -----);for (Address a:list){System.out.println(a);}//4.直接转化成map//第二参数是 map 的 key 的类型第三参数是 map 的 value 的类型MapType mapJavaType mapper.getTypeFactory().constructMapType(HashMap.class, String.class, Address.class);jsonStr{\address2\:{\shen\:\四川\,\city\:\简阳\},\address1\:{\shen\:\四川\,\city\:\成都\}};MapString,Address mapmapper.readValue(jsonStr,mapJavaType);for(String key:map.keySet()){Address value map.get(key);System.out.println(keykey vlauevalue);}}4.4解析总结 4.5调调用第三方接口json解析
http://www.zqtcl.cn/news/272117/

相关文章:

  • 知名商城网站建设公司wordpress主题 汉化
  • 网站上线做什么pc网站如何做移动适配
  • wap网站搭建北京北京网站建设
  • 放心的网站设计制作免费做logo设计的网站
  • 温州专业手机网站制作多少钱移动商城 网站建设方法方式
  • 周口网站开发wordpress
  • 如何查网站的备案号玉环在哪里做网站
  • 网站开发什么叫前端后端seo研究中心晴天
  • 邢台建筑类的建设网站代刷网站只做软件下载
  • 关于旅游的网站建设目的食品网站建设的目的
  • 开发php网站开发太湖网站建设推荐秒搜科技
  • 90设计网站怎么绑定手机号淘宝搜索排名
  • 无锡自助做网站哪些编程语言适合网站开发
  • 蒲城网站建设wzjseo北京专业推广公司
  • 阳春做网站外贸建站推广公司
  • 哪个网站的课件做的好源码之家关闭了
  • 各大网站热搜榜排名嵊州网站
  • 在哪找做网站的镇江网页设计工作室
  • 做网站的是干嘛的百度推广的几种方式
  • 临沧网站建设用eclipse做jsp网站
  • 做物流运输网站电话做网站看
  • 山东公司网站推广优化什么网站做宣传好
  • 企业网站模板设计外网vp(永久免费)加速器下载
  • 消费者联盟网站怎么做中山网站建设案例
  • 郑州市多商家网站制作公司网站建设要学多少课程
  • 现在网站开发模式淄博网站建设设计公司
  • 瑶海合肥网站建设东莞网站优化多少钱
  • pc蛋蛋游戏体验网站建设大型门户网站建设效果好吗
  • 昆明网站建设制作汽车之家官网网页版入口
  • 诸城建设局网站免费的创建个人网站