日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jackson高级操作————流式API与JsonGenerator、JsonParser

發布時間:2025/3/12 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jackson高级操作————流式API与JsonGenerator、JsonParser 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

繼《Jackson快速入門》之后的高級相關操作。

Jackson提供了一種對于性能要求應用程序操作json更加高效的方式——流式API,這種方式開銷小,性能高,因此,如果應用程序或者程序邏輯對于性能有一定要求,可以使用這種方式來進行json文件的讀寫操作,而對于一般的讀寫,使用普通的databind api即可。

要點

1、與Java8的“流式”概念不同,這種Jackson的這種流式是屬于IO流,在寫出與讀入的最后都要進行流的關閉 —— close()

2、這種流式API(Streaming APIs),是一種高性能(high-performance)讀寫JSON的方式,同時也是一種增量模式(incremental mode)。

3、Token概念:使用流式API的時候,每一個JSON 字符串都是一個獨立的 token 每一個token都會被增量處理(可以理解為一個一個地往上增加,類似于壘磚),這就是“增量模式”的含義。比如:

{"name" : "Morty" }

Token 1 = "{"

Token 2 = "name"

Token 3 = "Morty"

Token 4 = "}"

4、流式API的缺點:雖然流式API在性能上有所特長,但是通過第三點,也可以知道,每一個token都是增量處理的,也就是說,我們必須要小心翼翼地處理每個token,這可能會因為粗心導致丟掉必要的token (如 "}"、"]" 等),而且代碼可能并不簡潔,可讀性也不一定好,因此,不到需要考慮性能的時候,一定不要使用這種方式。

示例程序

通過Jackson Streaming APIs,寫入一個json文件——“user.json”,并讀出。

@Testpublic void testJsonGenerator() throws IOException {JsonFactory factory = new JsonFactory();// -----------------JsonGenerator --------------------JsonGenerator gentor = factory.createGenerator(new File("user.json"), JsonEncoding.UTF8);gentor.writeStartObject(); // {gentor.writeStringField("name", "Tomson");gentor.writeNumberField("age", 23);gentor.writeFieldName("messages");gentor.writeStartArray(); // [gentor.writeString("msg1");gentor.writeString("msg2");gentor.writeString("msg3");gentor.writeEndArray(); // ]gentor.writeEndObject(); // }gentor.close();// ------------------JsonParser --------------------JsonParser parser = factory.createParser(new File("user.json"));while (parser.nextToken() != JsonToken.END_OBJECT) {String fieldName = parser.getCurrentName();if ("name".equals(fieldName)) {// current token is "name",move to next which is "name"'s value.parser.nextToken();System.out.println(parser.getText());// display "Tomson"}if ("age".equals(fieldName)) {parser.nextToken();System.out.println(parser.getIntValue());}if ("messages".equals(fieldName)) {parser.nextToken();// messages is array, loop until equals "]"while(parser.nextToken() != JsonToken.END_ARRAY) {System.out.println(parser.getText());}}}parser.close();}

user.json文件內容:

程序執行輸出結果:

總結

Jackson Streaming APIs是一種高性能、增量式json讀寫工具,在需要特殊性能要求的時候才會用到。缺點是代碼不簡潔,易錯性高,可讀性較差,可以通過jackson data binding代替。

token的概念,每一個json字符串都要被視為token,包括表示對象的大括號以及表示數組的中括號

操作結束需要關流——close()。

?

總結

以上是生活随笔為你收集整理的Jackson高级操作————流式API与JsonGenerator、JsonParser的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。