栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

jackson学习之三:常用API操作,linux内核架构pdf

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jackson学习之三:常用API操作,linux内核架构pdf

TwitterEntry tFromFile = mapper.readValue(new File(“twitter.json”), TwitterEntry.class);

  1. byte数组转对象:

TwitterEntry tFromBytes = mapper.readValue(array, TwitterEntry.class);

  1. 字符串网络地址转对象:

String testJsonDataUrl = “https://raw.githubusercontent.com/zq2599/blog_demos/master/files/twitteer_message.json”;

TwitterEntry tFromUrl = mapper.readValue(new URL(testJsonDataUrl), TwitterEntry.class);

集合序列化
  1. HashMap转字符串:

String mapJsonStr = mapper.writevalueAsString(map);

集合反序列化
  1. 字符串转HashMap:

Map mapFromStr = mapper.readValue(mapJsonStr, new TypeReference>() {});

JsonNode
  1. 如果您不想使用XXX.class来做反序列化,也能使用JsonNode来操作:

JsonNode jsonNode = mapper.readTree(mapJsonStr);

String name = jsonNode.get(“name”).asText();

int age = jsonNode.get(“age”).asInt();

String city = jsonNode.get(“addr”).get(“city”).asText();

String street = jsonNode.get(“addr”).get(“street”).asText();

时间字段格式化
  1. 对于Date字段,默认的反序列化是时间戳,可以修改配置:

mapper.setDateFormat(new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”));

dateMapStr = mapper.writevalueAsString(dateMap);

JSON数组的反序列化

假设jsonArrayStr是个json数组格式的字符串:

  1. JSON数组转对象数组:

TwitterEntry[] twitterEntryArray = mapper.readValue(jsonArrayStr, TwitterEntry[].class);

  1. JSON数组转对象集合(ArrayList):

List twitterEntryList = mapper.readValue(jsonArrayStr, new TypeReference() {});

完整代码
  1. 上述所有常用API用法的完整代码如下:

package com.bolingcavalry.jacksondemo.databind;

import com.bolingcavalry.jacksondemo.beans.TwitterEntry;

import com.fasterxml.jackson.core.type.TypeReference;

import com.fasterxml.jackson.databind.JsonNode;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.io.File;

import java

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

.net.URL;

import java.text.SimpleDateFormat;

import java.util.*;

public class SimpleDemo {

private static final Logger logger = LoggerFactory.getLogger(SimpleDemo.class);

public static void main(String[] args) throws Exception {

ObjectMapper mapper = new ObjectMapper();

logger.info(“以下是序列化操作”);

// 对象 -> 字符串

TwitterEntry twitterEntry = new TwitterEntry();

twitterEntry.setId(123456L);

twitterEntry.setFromUserId(101);

twitterEntry.setToUserId(102);

twitterEntry.setText(“this is a message for serializer test”);

twitterEntry.setLanguageCode(“zh”);

String jsonStr = mapper.writevalueAsString(twitterEntry);

logger.info(“序列化的字符串:{}”, jsonStr);

// 对象 -> 文件

mapper.writevalue(new File(“twitter.json”), twitterEntry);

// 对象 -> byte数组

byte[] array = mapper.writevalueAsBytes(twitterEntry);

logger.info("nn以下是反序列化操作");

// 字符串 -> 对象

String objectJsonStr = “{n” +

" “id”:1125687077,n" +

" “text”:"@stroughtonsmith You need to add a “Favourites” tab to TC/iPhone. Like what TwitterFon did. I can’t WAIT for your Twitter App!!  Any ETA?",n" +

" “fromUserId”:855523, n" +

" “toUserId”:815309,n" +

" “languageCode”:“en”n" +

“}”;

TwitterEntry tFromStr = mapper.readValue(objectJsonStr, TwitterEntry.class);

logger.info(“从字符串反序列化的对象:{}”, tFromStr);

// 文件 -> 对象

TwitterEntry tFromFile = mapper.readValue(new File(“twitter.json”), TwitterEntry.class);

logger.info(“从文件反序列化的对象:{}”, tFromStr);

// byte数组 -> 对象

TwitterEntry tFromBytes = mapper.readValue(array, TwitterEntry.class);

logger.info(“从byte数组反序列化的对象:{}”, tFromBytes);

// 字符串网络地址 -> 对象

String testJsonDataUrl = “https://raw.githubusercontent.com/zq2599/blog_demos/master/files/twitteer_message.json”;

TwitterEntry tFromUrl = mapper.readValue(new URL(testJsonDataUrl), TwitterEntry.class);

logger.info(“从网络地址反序列化的对象:{}”, tFromUrl);

logger.info("nn以下是集合序列化操作");

Map map = new HashMap<>();

map.put(“name”, “tom”);

map.put(“age”, 11);

Map addr = new HashMap<>();

addr.put(“city”,“深圳”);

addr.put(“street”, “粤海”);

map.put(“addr”, addr);

String mapJsonStr = mapper.writevalueAsString(map);

logger.info(“HashMap序列化的字符串:{}”, mapJsonStr);

logger.info("nn以下是集合反序列化操作");

Map mapFromStr = mapper.readValue(mapJsonStr, new TypeReference>() {});

logger.info(“从字符串反序列化的HashMap对象:{}”, mapFromStr);

// JsonNode类型操作

JsonNode jsonNode = mapper.readTree(mapJsonStr);

String name = jsonNode.get(“name”).asText();

int age = jsonNode.get(“age”).asInt();

String city = jsonNode.get(“addr”).get(“city”).asText();

String street = jsonNode.get(“addr”).get(“street”).asText();

logger.info(“用JsonNode对象和API反序列化得到的数:name[{}]、age[{}]、city[{}]、street[{}]”, name, age, city, street);

// 时间类型格式

Map dateMap = new HashMap<>();

dateMap.put(“today”, new Date());

String dateMapStr = mapper.writevalueAsString(dateMap);

logger.info(“默认的时间序列化:{}”, dateMapStr);

// 设置时间格式

mapper.setDateFormat(new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”));

dateMapStr = mapper.writevalueAsString(dateMap);

logger.info(“自定义的时间序列化:{}”, dateMapStr);

System.out.println(objectJsonStr);

// json数组

String jsonArrayStr = “[{n” +

" “id”:1,n" +

" “text”:“text1”,n" +

" “fromUserId”:11, n" +

" “toUserId”:111,n" +

" “languageCode”:“en”n" +

“},n” +

“{n” +

" “id”:2,n" +

" “text”:“text2”,n" +

" “fromUserId”:22, n" +

" “toUserId”:222,n" +

" “languageCode”:“zh”n" +

“},n” +

“{n” +

" “id”:3,n" +

" “text”:“text3”,n" +

" “fromUserId”:33, n" +

" “toUserId”:333,n" +

" “languageCode”:“en”n" +

“}]”;

// json数组 -> 对象数组

TwitterEntry[] twitterEntryArray = mapper.readValue(jsonArrayStr, TwitterEntry[].class);

logger.info(“json数组反序列化成对象数组:{}”, Arrays.toString(twitterEntryArray));

// json数组 -> 对象集合

List twitterEntryList = mapper.readValue(jsonArrayStr, new TypeReference() {});

logger.info(“json数组反序列化成对象集合:{}”, twitterEntryList);

}

}

  1. 执行结果如下:

C:jdkbinjava.exe -javaagent:C:sofwareJetBrainsIntelliJIDEAlibidea_rt.jar=64570:C:sofwareJetBrainsIntelliJIDEAbin -Dfile.encoding=UTF-8 -classpath C:jdkjrelibcharsets.jar;C:jdkjrelibdeploy.jar;C:jdkjrelibextaccess-bridge-64.jar;C:jdkjrelibextcldrdata.jar;C:jdkjrelibextdnsns.jar;C:jdkjrelibextjaccess.jar;C:jdkjrelibextjfxrt.jar;C:jdkjrelibextlocaledata.jar;C:jdkjrelibextnashorn.jar;C:jdkjrelibextsunec.jar;C:jdkjrelibextsunjce_provider.jar;C:jdkjrelibextsunmscapi.jar;C:jdkjrelibextsunpkcs11.jar;C:jdkjrelibextzipfs.jar;C:jdkjrelibjavaws.jar;C:jdkjrelibjce.jar;C:jdkjrelibjfr.jar;C:jdkjrelibjfxswt.jar;C:jdkjrelibjsse.jar;C:jdkjrelibmanagement-agent.jar;C:jdkjrelibplugin.jar;C:jdkjrelibresources.jar;C:jdkjrelibrt.jar;D:githubblog_demosjacksondemodatabindtargetclasses;C:Users12167.m2repositorycomfasterxmljacksoncorejackson-databind2.11.0jackson-databind-2.11.0.jar;C:Users12167.m2repositorycomfasterxmljacksoncorejackson-annotations2.11.0jackson-annotations-2.11.0.jar;C:Users12167.m2repositorycomfasterxmljacksoncorejackson-core2.11.0jackson-core-2.11.0.jar;C:Users12167.m2repositoryorgslf4jslf4j-log4j121.7.25slf4j-log4j12-1.7.25.jar;C:Users12167.m2repositoryorgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;C:Users12167.m2repositorylog4jlog4j1.2.17log4j-1.2.17.jar;C:Users12167.m2repositorycommons-iocommons-io2.7commons-io-2.7.jar;C:Users12167.m2repositoryorgapachecommonscommons-lang33.10commons-lang3-3.10.jar;D:githubblog_demosjacksondemobeanstargetclasses com.bolingcavalry.jacksondemo.databind.SimpleDemo

2020-08-28 07:53:01 INFO SimpleDemo:27 - 以下是序列化操作

2020-08-28 07:53:01 INFO SimpleDemo:38 - 序列化的字符串:{“id”:123456,“text”:“this is a message for serializer test”,“fromUserId”:101,“toUserId”:102,“languageCode”:“zh”}

2020-08-28 07:53:01 INFO SimpleDemo:47 -

以下是反序列化操作

2020-08-28 07:53:01 INFO SimpleDemo:60 - 从字符串反序列化的对象:[Tweet, id: 1125687077, text=’@stroughtonsmith You need to add a “Favourites” tab to TC/iPhone. Like what TwitterFon did. I can’t WAIT for your Twitter App!!  Any ETA?’, from: 855523, to: 815309, lang: en]

2020-08-28 07:53:01 INFO SimpleDemo:64 - 从文件反序列化的对象:[Tweet, id: 1125687077, text=’@stroughtonsmith You need to add a “Favourites” tab to TC/iPhone. Like what TwitterFon did. I can’t WAIT for your Twitter App!!  Any ETA?’, from: 855523, to: 815309, lang: en]

2020-08-28 07:53:01 INFO SimpleDemo:68 - 从byte数组反序列化的对象:[Tweet, id: 123456, text=‘this is a message for serializer test’, from: 101, to: 102, lang: zh]

2020-08-28 07:53:04 INFO SimpleDemo:74 - 从网络地址反序列化的对象:[Tweet, id: 112233445566, text=‘this is a message from zq2599’s github’, from: 201, to: 202, lang: en]

2020-08-28 07:53:04 INFO SimpleDemo:77 -

以下是集合序列化操作

2020-08-28 07:53:04 INFO SimpleDemo:90 - HashMap序列化的字符串:{“name”:“tom”,“addr”:{“city”:“深圳”,“street”:“粤海”},“age”:11}

2020-08-28 07:53:04 INFO SimpleDemo:92 -

以下是集合反序列化操作

2020-08-28 07:53:04 INFO SimpleDemo:94 - 从字符串反序列化的HashMap对象:{name=tom, addr={city=深圳, street=粤海}, age=11}

2020-08-28 07:53:04 INFO SimpleDemo:103 - 用JsonNode对象和API反序列化得到的数:name[tom]、age[11]、city[深圳]、street[粤海]

2020-08-28 07:53:04 INFO SimpleDemo:111 - 默认的时间序列化:{“today”:1598572384838}

2020-08-28 07:53:04 INFO SimpleDemo:116 - 自定义的时间序列化:{“today”:“2020-08-28 07:53:04”}

{

“id”:1125687077,

“text”:"@stroughtonsmith You need to add a “Favourites” tab to TC/iPhone. Like what TwitterFon did. I can’t WAIT for your Twitter App!!  Any ETA?",

“fromUserId”:855523,

“toUserId”:815309,

“languageCode”:“en”

}

2020-08-28 07:53:04 INFO SimpleDemo:145 - json数组反序列化成对象数组:[[Tweet, id: 1, text=‘text1’, from: 11, to: 111, lang: en], [Tweet, id: 2, text=‘text2’, from: 22, to: 222, lang: zh], [Tweet, id: 3, text=‘text3’, from: 33, to: 333, lang: en]]

2020-08-28 07:53:04 INFO SimpleDemo:149 - json数组反序列化成对象集合:[[Tweet, id: 1, text=‘text1’, from: 11, to: 111, lang: en], [Tweet, id: 2, text=‘text2’, from: 22, to: 222, lang: zh], [Tweet, id: 3, text=‘text3’, from: 33, to: 333, lang: en]]

Process finished with exit code 0

  1. 还会产生名为twitter.json的文件,内容如下:

{“id”:123456,“text”:“this is a message for serializer test”,“fromUserId”:101,“toUserId”:102,“languageCode”:“zh”}

常用配置

下面是平时可能用到的自定义配置项目:

  1. 序列化结果格式化:

mapper.enable(SerializationFeature.INDENT_OUTPUT);

  1. 空对象不要抛出异常:

mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

  1. Date、Calendar等序列化为时间格式的字符串(如果不执行以下设置,就会序列化成时间戳格式):

mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

  1. 反序列化时,遇到未知属性不要抛出异常:

mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

  1. 反序列化时,空字符串对于的实例属性为null:

mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

  1. 允许C和C++样式注释:

mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509890.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号