成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java json 庫之 jackson

y1chuan / 3806人閱讀

摘要:是一個(gè)庫,提供了完備的解析,序列化以及反序列化功能依賴配置在里面添加依賴配置解析調(diào)用就能講字符串解析成一個(gè)對(duì)象,然后通過方法就可以獲取中各個(gè)字段的值了,這種方式可以用來讀取格式的配置文件,可以用一個(gè)打開特性,可以在里面加入注釋

jackson 是一個(gè) java json 庫,提供了完備的 json 解析,序列化以及反序列化功能

依賴配置

在 build.gradle 里面添加依賴配置

compile group: "com.fasterxml.jackson.core", name: "jackson-core", version: "2.9.4"
compile group: "com.fasterxml.jackson.core", name: "jackson-databind", version: "2.9.4"
compile group: "com.fasterxml.jackson.core", name: "jackson-annotations", version: "2.9.4"
json 解析
String jsonString = "{"name": "hatlonely" /* comment */, "birthday": "2018-03-18 15:26:37", "mails": ["[email protected]", "[email protected]"]}";

JsonFactory jsonFactory = new JsonFactory();
jsonFactory.enable(Feature.ALLOW_COMMENTS);
ObjectMapper objectMapper = new ObjectMapper(jsonFactory);
JsonNode node = objectMapper.readTree(jsonString);

assertThat(node.path("name").asText(), equalTo("hatlonely"));
assertThat(node.path("birthday").asText(), equalTo("2018-03-18 15:26:37"));
assertThat(node.path("mails").size(), equalTo(2));
assertThat(node.path("mails").path(0).asText(), equalTo("[email protected]"));
assertThat(node.path("mails").path(1).asText(), equalTo("[email protected]"));

調(diào)用 ObjectMapper.readTree 就能講 json 字符串解析成一個(gè) JsonNode 對(duì)象,然后通過 path 方法就可以獲取 json 中各個(gè)字段的值了,這種方式可以用來讀取 json 格式的配置文件,可以用一個(gè) JsonFactory 打開 ALLOW_COMMENTS 特性,可以在 json 里面加入注釋

序列化與反序列化 首先定義一個(gè)對(duì)象
class Person {
    String name;

    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    Date birthday;

    @JsonProperty("mails")
    List emails;

    // 省略了 getter/setter
}

除了支持基本的數(shù)據(jù)類型,還支持 List 和 Map 類型,甚至還支持 Date 類型,Date 類型默認(rèn)的格式是 ISO8601 格式,也可以通過 @JsonFormat 指定日期格式,通過 @JsonProperty 指定字段在 json 中的字段名

序列化
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

Person person = new Person();
person.setName("hatlonely");
person.setBirthday(dateFormat.parse("2018-03-18 15:26:37"));
person.setEmails(Arrays.asList("[email protected]", "[email protected]"));

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(person);

assertThat(jsonString, equalTo(
        "{"name":"hatlonely","birthday":"2018-03-18 03:26:37","mails":["[email protected]","[email protected]"]}"));

使用 ObjectMapper.writeValueAsString 方法就可以序列化成 string

反序列化
String jsonString = "{"name": "hatlonely", "birthday": "2018-03-18 15:26:37", "mails": ["[email protected]", "[email protected]"]}";

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Person person = objectMapper.readValue(jsonString, Person.class);

assertThat(person.getName(), equalTo("hatlonely"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
assertThat(person.getBirthday(), equalTo(dateFormat.parse("2018-03-18 15:26:37")));
assertThat(person.getEmails(), equalTo(Arrays.asList("[email protected]", "[email protected]")));

使用 ObjectMapper.readValue 方法就能實(shí)現(xiàn)反序列化,可以通過 configure 方法設(shè)置碰到未知的屬性不拋異常

參考鏈接

Jackson JSON Tutorial:http://www.baeldung.com/jackson

Jackson maven 倉庫:http://mvnrepository.com/sear...

測(cè)試代碼鏈接:https://github.com/hatlonely/...

轉(zhuǎn)載請(qǐng)注明出處 
本文鏈接:http://hatlonely.com/2018/03/...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68854.html

相關(guān)文章

  • Java中的JSON數(shù)據(jù)綁定框架Jackson使用介紹

    摘要:系列文章地址文檔可以輕松的將對(duì)象轉(zhuǎn)換成對(duì)象和文檔,同樣也可以將轉(zhuǎn)換成對(duì)象。在項(xiàng)目中如果要引入,可以直接利用或者引入注意,項(xiàng)目已經(jīng)自動(dòng)依賴了與,不需要額外重復(fù)引入。 Github 系列文章地址 Jackson jackson-databind文檔 Jackson可以輕松的將Java對(duì)象轉(zhuǎn)換成json對(duì)象和xml文檔,同樣也可以將json、xml轉(zhuǎn)換成Java對(duì)象。在項(xiàng)目中如果要引入Jac...

    mengera88 評(píng)論0 收藏0
  • 將多個(gè)JSON字段映射到單個(gè)Java字段

    摘要:簡(jiǎn)介本文中,教大家如何使用和將不同的字段映射到單個(gè)字段中。這兩個(gè)注解將幫助我們把屬性映射到同一字段。因此,將知道文檔中映射到字段的其他字段的名稱。 簡(jiǎn)介 本文中,教大家如何使用Jackson和Gson將不同的JSON字段映射到單個(gè)Java字段中。 Maven依賴 為了使用Jackson和Gson庫,我們需要在POM中添加以下依賴項(xiàng): com.google.code.gson ...

    printempw 評(píng)論0 收藏0
  • java性能調(diào)優(yōu)記錄(線程阻塞)

    摘要:其中內(nèi)容如下網(wǎng)關(guān)的邏輯是讀取請(qǐng)求中的值,根據(jù)字段去內(nèi)存的路由表中匹配路由,然后轉(zhuǎn)發(fā)請(qǐng)求到對(duì)應(yīng)的微服務(wù)中去。排查測(cè)試接口本身的性能發(fā)現(xiàn)接口的可以達(dá)到。解決改寫代碼以實(shí)現(xiàn)同樣的功能之后進(jìn)行測(cè)試,發(fā)現(xiàn)從提升到了,問題解決。 1. 問題 spring-cloud-gateway 作為統(tǒng)一的請(qǐng)求入口,負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求到相應(yīng)的微服務(wù)中去。 采用的 Spring Cloud 的版本為 Finchley ...

    AndroidTraveler 評(píng)論0 收藏0
  • SpringMVC接收和響應(yīng)json數(shù)據(jù)

    摘要:客戶端提交阻止默認(rèn)事件得到搜索框數(shù)據(jù)值轉(zhuǎn)為的方法失敗啦當(dāng)前請(qǐng)求方式為控制臺(tái)輸出當(dāng)前請(qǐng)求方式為客戶端彈窗三以方式接收以數(shù)組形式傳遞客戶端失敗啦注意傳遞到后端時(shí)應(yīng)為的格式數(shù)據(jù),否則可能會(huì)出現(xiàn)錯(cuò)誤。 前后端的數(shù)據(jù)交互,除了通過form表單進(jìn)行提交外,也可以通過ajax向后端傳遞和接收json格式數(shù)據(jù)(這種方式可以實(shí)現(xiàn)請(qǐng)求數(shù)據(jù)和頁面分離)。本文將總結(jié)一下在Spring MVC中接收和響應(yīng)jso...

    JowayYoung 評(píng)論0 收藏0
  • python三方庫之requests-快速上手

    摘要:基于發(fā)送請(qǐng)求發(fā)送請(qǐng)求發(fā)送請(qǐng)求其他請(qǐng)求接口與請(qǐng)求類型一致,如等。如果請(qǐng)求返回或狀態(tài)碼,調(diào)用會(huì)拋出此異常。請(qǐng)求超過配置的最大重定向數(shù)。 基于2.21.0 發(fā)送請(qǐng)求 發(fā)送GET請(qǐng)求: r = requests.get(https://api.github.com/events) 發(fā)送POST請(qǐng)求: r = requests.post(https://httpbin.org/post, dat...

    xioqua 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<