Jackson - 快速指南
概述
Jackson 是一個基於 Java 的簡單庫,用於將 Java 物件序列化為 JSON,反之亦然。
特性
易於使用。 - Jackson API 提供了一個高階外觀來簡化常用的用例。
無需建立對映。 - Jackson API 為大多數要序列化的物件提供了預設對映。
效能。 - Jackson 非常快,記憶體佔用少,適用於大型物件圖或系統。
乾淨的 JSON。 - Jackson 建立乾淨簡潔的 JSON 結果,易於閱讀。
無依賴性。 - Jackson 庫除了 JDK 外不需要任何其他庫。
開源 - Jackson 庫是開源的,可以免費使用。
三種處理 JSON 的方法
Jackson 提供三種替代方法來處理 JSON
流式 API - 將 JSON 內容讀取和寫入為離散事件。JsonParser 讀取資料,而 JsonGenerator 寫入資料。它是三種方法中最強大的方法,開銷最低,讀寫操作最快。它類似於 XML 的 Stax 解析器。
樹模型 - 準備 JSON 文件的記憶體樹表示。ObjectMapper 構建 JsonNode 節點的樹。這是最靈活的方法。它類似於 XML 的 DOM 解析器。
資料繫結 - 使用屬性訪問器或註解將 JSON 轉換為 POJO(普通舊 Java 物件),反之亦然。它有兩種型別。
簡單資料繫結 - 將 JSON 轉換為 Java Maps、Lists、Strings、Numbers、Booleans 和 null 物件,反之亦然。
完整資料繫結 - 將 JSON 轉換為任何 JAVA 型別,反之亦然。
環境設定
線上嘗試選項
您真的不需要設定自己的環境來開始學習 Guava,一個基於 JAVA 的庫。原因很簡單,我們已經線上設定了 Java 程式設計環境,以便您可以在進行理論工作的同時,線上編譯和執行所有可用的示例。這使您對正在閱讀的內容充滿信心,並可以使用不同的選項檢查結果。隨意修改任何示例並在線上執行。
使用以下示例,在下面示例程式碼框的右上角使用嘗試選項。
public class MyFirstJavaProgram { public static void main(String []args) { System.out.println("Hello World"); } }對於本教程中給出的大多數示例,您都會找到嘗試選項,因此只需使用它並享受您的學習。
本地環境設定
如果您仍然希望為 Java 程式語言設定環境,則本節將指導您如何在機器上下載和設定 Java。請按照以下步驟設定環境。
Java SE 可從以下連結免費獲得 下載 Java。因此,您可以根據您的作業系統下載一個版本。
按照說明下載 java 並執行.exe 在您的機器上安裝 Java。在您的機器上安裝 Java 後,您需要設定環境變數以指向正確的安裝目錄
為 Windows 2000/XP 設定路徑
假設您已將 Java 安裝在c:\Program Files\java\jdk目錄中
右鍵單擊“我的電腦”,然後選擇“屬性”。
在“高階”選項卡下單擊“環境變數”按鈕。
現在,更改“Path”變數,使其還包含 Java 可執行檔案的路徑。例如,如果路徑當前設定為“C:\WINDOWS\SYSTEM32”,則將您的路徑更改為“C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin”。
為 Windows 95/98/ME 設定路徑
假設您已將 Java 安裝在c:\Program Files\java\jdk目錄中
編輯“C:\autoexec.bat”檔案,並在末尾新增以下行
“SET PATH=%PATH%;C:\Program Files\java\jdk\bin”
為 Linux、UNIX、Solaris、FreeBSD 設定路徑
環境變數 PATH 應設定為指向已安裝 Java 二進位制檔案的目錄。如果您在執行此操作時遇到問題,請參閱您的 shell 文件。
例如,如果您使用bash作為您的 shell,那麼您將在“.bashrc”的末尾新增以下行:export PATH=/path/to/java:$PATH'
流行的 Java 編輯器
要編寫 Java 程式,您需要一個文字編輯器。市場上甚至還有更復雜的 IDE 可用。但就目前而言,您可以考慮以下之一
記事本:在 Windows 機器上,您可以使用任何簡單的文字編輯器,如記事本(推薦用於本教程)、TextPad。
Netbeans:是一個開源且免費的 Java IDE,可以從http://www.netbeans.org/index.html下載。
Eclipse:也是一個由 Eclipse 開源社群開發的 Java IDE,可以從http://www.eclipse.org/下載。
下載 Jackson 歸檔檔案
從Maven 儲存庫 - Jackson下載最新版本的 Jackson jar 檔案。在本教程中,jackson-core-2.8.9.jar、jackson-annotations-2.8.9.jar 和 jackson-databind-2.8.9.jar 已下載並複製到 C:\> jackson 資料夾中。
| 作業系統 | 歸檔檔名 |
|---|---|
| Windows | jackson-xxx-2.8.9.jar |
| Linux | jackson-xxx-2.8.9.jar |
| Mac | jackson-xxx-2.8.9.jar |
設定 Jackson 環境
設定jackson_HOME環境變數以指向 Guava jar 儲存在您機器上的基本目錄位置。假設,我們已將 jackson-core-2.8.9.jar、jackson-annotations-2.8.9.jar 和 jackson-databind-2.8.9.jar 解壓到各個作業系統的 jackson 資料夾中,如下所示。
| 作業系統 | 輸出 |
|---|---|
| Windows | 將環境變數 jackson_HOME 設定為 C:\jackson |
| Linux | export jackson_HOME=/usr/local/jackson |
| Mac | export jackson_HOME=/Library/jackson |
設定 CLASSPATH 變數
設定CLASSPATH環境變數以指向 jackson jar 的位置。假設,我們已將 jackson-core-2.8.9.jar、jackson-annotations-2.8.9.jar 和 jackson-databind-2.8.9.jar 儲存在各個作業系統的 jackson 資料夾中,如下所示。
| 作業系統 | 輸出 |
|---|---|
| Windows | 將環境變數 CLASSPATH 設定為 %CLASSPATH%;%jackson_HOME%\jackson-core-2.8.9.jar;%jackson_HOME%\jackson-databind-2.8.9.jar;%jackson_HOME%\jackson-annotations-2.8.9.jar;.; |
| Linux | export CLASSPATH=$CLASSPATH:$jackson_HOME/jackson-core-2.8.9.jar:$jackson_HOME/jackson-databind-2.8.9.jar:$jackson_HOME/jackson-annotations-2.8.9.jar:. |
| Mac | export CLASSPATH=$CLASSPATH:$jackson_HOME/jackson-core-2.8.9.jar:$jackson_HOME/jackson-databind-2.8.9.jar:$jackson_HOME/jackson-annotations-2.8.9.jar:. |
第一個應用
在深入瞭解 jackson 庫的細節之前,讓我們看看一個實際應用。在此示例中,我們建立了 Student 類。我們將使用學生詳細資訊建立一個 JSON 字串,並將其反序列化為學生物件,然後將其序列化為 JSON 字串。
在C:\>Jackson_WORKSPACE中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
//map json to student
try{
Student student = mapper.readValue(jsonString, Student.class);
System.out.println(student);
jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student);
System.out.println(jsonString);
}
catch (JsonParseException e) { e.printStackTrace();}
catch (JsonMappingException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}
需要記住的步驟
以下是此處需要考慮的重要步驟。
步驟 1:建立 ObjectMapper 物件。
建立 ObjectMapper 物件。它是一個可重用的物件。
ObjectMapper mapper = new ObjectMapper();
步驟 2:將 JSON 反序列化為物件。
使用 readValue() 方法從 JSON 獲取物件。將 json 字串/json 字串的源和物件型別作為引數傳遞。
//Object to JSON Conversion Student student = mapper.readValue(jsonString, Student.class);
步驟 3:將物件序列化為 JSON。
使用 writeValueAsString() 方法獲取物件的 JSON 字串表示形式。
//Object to JSON Conversion jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student);
ObjectMapper 類
ObjectMapper 是 Jackson 庫的主要參與者類。ObjectMapper 類 ObjectMapper 提供了讀取和寫入 JSON 的功能,可以從基本 POJO(普通舊 Java 物件)或從通用 JSON 樹模型 (JsonNode) 讀取和寫入,以及執行轉換的相關功能。它也高度可定製,可以與不同風格的 JSON 內容一起使用,並支援更高階的物件概念,例如多型性和物件標識。ObjectMapper 還可以充當更高階的 ObjectReader 和 ObjectWriter 類的工廠。
類宣告
以下是com.fasterxml.jackson.databind.ObjectMapper類的宣告:
public class ObjectMapper
extends ObjectCodec
implements Versioned, Serializable
巢狀類
| 序號 | 類和描述 |
|---|---|
| 1 | static class ObjectMapper.DefaultTypeResolverBuilder
自定義 TypeResolverBuilder,提供與所謂的“預設型別”(有關詳細資訊,請參閱 enableDefaultTyping())一起使用的型別解析器構建器。 |
| 2 | static class ObjectMapper.DefaultTyping
與 enableDefaultTyping() 一起使用的列舉,用於指定應為哪種型別的型別(類)使用預設型別。 |
欄位
protected DeserializationConfig _deserializationConfig - 定義序列化過程基本全域性設定的配置物件。
protected DefaultDeserializationContext _deserializationContext - 藍圖上下文物件;儲存在此處以允許自定義子類。
protected InjectableValues _injectableValues - 反序列化 POJO 中要注入的值的提供程式。
protected JsonFactory _jsonFactory - 用於根據需要建立 JsonParser 和 JsonGenerator 例項的工廠。
protected SimpleMixInResolver _mixIns - 定義如何應用 mix-in 註解的對映:鍵是要接收附加註解的型別,值是要“混合”的註解的型別。
protected ConfigOverrides _propertyOverrides - 當前活動的每型別配置覆蓋,透過屬性的宣告型別訪問。
protected Set<Object> _registeredModuleTypes - 已註冊的模組型別集(根據 Module.getTypeId());僅在 MapperFeature.IGNORE_DUPLICATE_MODULE_REGISTRATIONS 啟用時跟蹤,以便可以忽略重複的註冊呼叫(以避免多次新增相同的處理程式,主要是)。
protected ConcurrentHashMap<JavaType,JsonDeserializer<Object>> _rootDeserializers - 我們將使用單獨的主級 Map 來跟蹤根級反序列化器。
protected SerializationConfig _serializationConfig - 定義序列化過程基本全域性設定的配置物件。
protected SerializerFactory _serializerFactory - 用於構造序列化器的序列化器工廠。
protected DefaultSerializerProvider _serializerProvider - 管理對用於序列化的序列化器訪問的物件,包括快取。
protected SubtypeResolver _subtypeResolver - 用於註冊子型別、根據需要將它們解析為超型別/子型別的事物。
protected TypeFactory _typeFactory - 用於建立 JavaType 例項的特定工廠;需要允許模組新增更多自定義型別處理(主要用於支援非 Java JVM 語言的型別)。
protected static AnnotationIntrospector DEFAULT_ANNOTATION_INTROSPECTOR
protected static BaseSettings DEFAULT_BASE - 基本設定包含所有 ObjectMapper 例項使用的預設值。
protected static VisibilityChecker<?> STD_VISIBILITY_CHECKER
建構函式
| 序號 | 建構函式和描述 |
|---|---|
| 1 | ObjectMapper() 預設建構函式,它將根據需要構造預設的 JsonFactory,使用 SerializerProvider 作為其 SerializerProvider,以及 BeanSerializerFactory 作為其 SerializerFactory。 |
| 2 | ObjectMapper(JsonFactory jf) 構造使用指定的 JsonFactory 來構造必要的 JsonParsers 和/或 JsonGenerators 的例項。 |
| 3 | ObjectMapper(JsonFactory jf, SerializerProvider sp, DeserializerProvider dp) 構造使用指定的 JsonFactory 來構造必要的 JsonParsers 和/或 JsonGenerators 的例項,並使用給定的提供程式來訪問序列化器和反序列化器。 |
| 4 | protected ObjectMapper(ObjectMapper src) 複製建構函式,主要用於支援 copy()。 |
方法
| 1 | protected void _checkInvalidCopy(Class<?> exp) |
| 2 | protected void _configAndWriteValue(JsonGenerator g, Object value) - 用於根據需要配置生成器,然後呼叫寫入功能的方法 |
| 3 | protected Object _convert(Object fromValue, JavaType toValueType) - 實際的轉換實現:而不是使用現有的讀取和寫入方法,大部分程式碼都是內聯的。 |
| 4 | protected JsonDeserializer<Object> _findRootDeserializer(DeserializationContext ctxt, JavaType valueType) - 用於查詢傳遞的根級值的反序列化器的方法。 |
| 5 | protected JsonToken _initForReading(JsonParser p) - 用於確保給定的解析器已準備好讀取資料繫結的內容的方法。 |
| 6 | protected ObjectReader _newReader(DeserializationConfig config) - 子類必須覆蓋的工廠方法,以生成正確子型別的 ObjectReader 例項 |
| 7 | protected ObjectReader _newReader(DeserializationConfig config, JavaType valueType, Object valueToUpdate, FormatSchema schema, InjectableValues injectableValues) - 子類必須覆蓋的工廠方法,以生成正確子型別的 ObjectReader 例項 |
| 8 | protected ObjectWriter _newWriter(SerializationConfig config) - 子類必須覆蓋的工廠方法,以生成正確子型別的 ObjectWriter 例項 |
| 9 | protected ObjectWriter _newWriter(SerializationConfig config, FormatSchema schema) - 子類必須覆蓋的工廠方法,以生成正確子型別的 ObjectWriter 例項 |
| 10 | protected ObjectWriter _newWriter(SerializationConfig config, JavaType rootType, PrettyPrinter pp) - 子類必須覆蓋的工廠方法,以生成正確子型別的 ObjectWriter 例項。 |
| 11 | protected Object _readMapAndClose(JsonParser p0, JavaType valueType) |
| 12 | protected Object _readValue(DeserializationConfig cfg, JsonParser p, JavaType valueType) - 值讀取+繫結操作的實際實現。 |
| 13 | protected DefaultSerializerProvider _serializerProvider(SerializationConfig config) |
| 14 | protected Object _unwrapAndDeserialize(JsonParser p, DeserializationContext ctxt, DeserializationConfig config, JavaType rootType, JsonDeserializer<Object> deser) |
| 15 | protected void _verifySchemaType(FormatSchema schema) |
| 16 | void acceptJsonFormatVisitor(Class<?> type, JsonFormatVisitorWrapper visitor) - 用於使用指定的訪問者訪問給定型別的型別層次結構的方法。 |
| 17 | void acceptJsonFormatVisitor(JavaType type, JsonFormatVisitorWrapper visitor) - 用於使用指定的訪問者訪問給定型別的型別層次結構的方法。 |
| 18 | ObjectMapper addHandler(DeserializationProblemHandler h) - 用於新增指定的 DeserializationProblemHandler 以用於處理反序列化期間的特定問題的方法。 |
| 19 | ObjectMapper addMixIn(Class<?> target, Class<?> mixinSource) - 用於新增混合註釋以用於增強指定類或介面的方法。 |
| 20 | boolean canDeserialize(JavaType type) - 可以呼叫以檢查對映器是否認為可以反序列化給定型別的物件的方法。 |
| 21 | boolean canDeserialize(JavaType type, AtomicReference<Throwable> cause) - 與 canDeserialize(JavaType) 類似的方法,但可以返回嘗試構造序列化器時丟擲的實際 Throwable:這可能有助於找出實際問題是什麼。 |
| 22 | boolean canSerialize(Class<?> type) - 可以呼叫以檢查對映器是否認為可以序列化給定類的例項的方法。 |
| 23 | boolean canSerialize(Class<?> type, AtomicReference<Throwable> cause) - 與 canSerialize(Class) 類似的方法,但可以返回嘗試構造序列化器時丟擲的實際 Throwable:這可能有助於找出實際問題是什麼。 |
| 24 | ObjectMapper clearProblemHandlers() - 用於從此對映器中刪除所有已註冊的 DeserializationProblemHandlers 例項的方法。 |
| 25 | MutableConfigOverride configOverride(Classlt;?> type) - 用於獲取給定型別的可變配置覆蓋物件的方法,需要新增或更改應用於給定型別屬性的每個型別的覆蓋。 |
| 26 | ObjectMapper configure(DeserializationFeature f, boolean state) - 用於更改此物件對映器的開啟/關閉反序列化功能狀態的方法。 |
| 27 | ObjectMapper configure(JsonGenerator.Feature f, boolean state) - 用於更改此物件對映器建立的生成器例項的開啟/關閉 JsonGenerator 功能狀態的方法。 |
| 28 | ObjectMapper configure(JsonParser.Feature f, boolean state) - 用於更改此物件對映器建立的解析器例項的指定 JsonParser.Features 狀態的方法。 |
| 29 | ObjectMapper configure(MapperFeature f, boolean state) - 用於更改此對映器例項的開啟/關閉對映器功能狀態的方法。 |
| 30 | ObjectMapper configure(SerializationFeature f, boolean state) - 用於更改此物件對映器的開啟/關閉序列化功能狀態的方法。 |
| 31 | JavaType constructType(Type t) - 用於根據給定型別(通常是 java.lang.Class)構造 JavaType 的便捷方法,但沒有顯式上下文。 |
| 32 | <T> T convertValue(Object fromValue, Class<T> toValueType) - 用於從給定值到給定值型別的例項進行兩步轉換的便捷方法,如果(但僅當!)需要轉換時。 |
| 33 | <T> T convertValue(Object fromValue, JavaType toValueType) - 請參閱 convertValue(Object, Class) |
| 34 | <T> T convertValue(Object fromValue, TypeReference<?> toValueTypeRef) - 請參閱 convertValue(Object, Class) |
| 35 | ObjectMapper copy() - 用於建立具有與該例項相同的初始配置的新 ObjectMapper 例項的方法。 |
| 36 | ArrayNode createArrayNode() - 注意:返回型別是協變的,因為基本 ObjectCodec 抽象不能引用具體的節點型別(因為它屬於核心包,而實現屬於對映器包) |
| 37 | ObjectNode createObjectNode() - 注意:返回型別是協變的,因為基本 ObjectCodec 抽象不能引用具體的節點型別(因為它屬於核心包,而實現屬於對映器包) |
| 38 | protected ClassIntrospector defaultClassIntrospector() - 用於構建要使用的預設 ClassIntrospector 的可覆蓋輔助方法。 |
| 39 | ObjectMapper disable(DeserializationFeature feature) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 40 | ObjectMapper disable(DeserializationFeature first, DeserializationFeature... f) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 41 | ObjectMapper disable(JsonGenerator.Feature... features) - 用於停用此物件對映器建立的解析器例項的指定 JsonGenerator.Features 的方法。 |
| 42 | ObjectMapper disable(JsonParser.Feature... features) - 用於停用此物件對映器建立的解析器例項的指定 JsonParser.Features 的方法。 |
| 43 | ObjectMapper disable(MapperFeature... f) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 44 | ObjectMapper disable(SerializationFeature f) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 45 | ObjectMapper disable(SerializationFeature first, SerializationFeature... f) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 46 | ObjectMapper disableDefaultTyping() - 用於停用自動包含型別資訊的方法;如果是這樣,只有顯式註釋的型別(具有 JsonTypeInfo 的型別)將具有其他嵌入的型別資訊。 |
| 47 | ObjectMapper enable(DeserializationFeature feature) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 48 | ObjectMapper enable(DeserializationFeature first, DeserializationFeature... f) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 49 | ObjectMapper enable(JsonGenerator.Feature... features) - 用於啟用此物件對映器建立的解析器例項的指定 JsonGenerator.Features 的方法。 |
| 50 | ObjectMapper enable(JsonParser.Feature... features) - 用於啟用此物件對映器建立的解析器例項的指定 JsonParser.Features 的方法。 |
| 51 | ObjectMapper enable(MapperFeature... f) - 用於啟用指定的 MapperConfig 功能的方法。 |
| 52 | ObjectMapper enable(SerializationFeature f) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 53 | ObjectMapper enable(SerializationFeature first, SerializationFeature... f) - 用於啟用指定的 DeserializationConfig 功能的方法。 |
| 54 | ObjectMapper enableDefaultTyping() - 等效於呼叫的便捷方法 |
| 55 | ObjectMapper enableDefaultTyping(ObjectMapper.DefaultTyping dti) - 等效於呼叫的便捷方法 |
| 56 | ObjectMapper enableDefaultTyping(ObjectMapper.DefaultTyping applicability, JsonTypeInfo.As includeAs) - 用於啟用自動包含型別資訊的方法,這對於多型型別的正確反序列化是必需的(除非型別已使用 JsonTypeInfo 進行註釋)。 |
| 57 | ObjectMapper enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping applicability, String propertyName) - 用於啟用自動包含型別資訊的方法——對於多型型別的正確反序列化是必需的(除非型別已使用 JsonTypeInfo 進行註釋)——使用“As.PROPERTY”包含機制和指定的屬性名稱用於包含(預設為“@class”,因為預設型別資訊始終使用類名作為型別識別符號) |
| 58 | ObjectMapper findAndRegisterModules() - 在功能上等效於以下內容的便捷方法:mapper.registerModules(mapper.findModules()); |
| 59 | Class<?> findMixInClassFor(Class<?> cls) |
| 60 | static List<Module> findModules() - 用於使用 JDK ServiceLoader 功能以及模組提供的 SPI 定位可用方法的方法。 |
| 61 | static List<Module> findModules(ClassLoader classLoader) - 用於使用 JDK ServiceLoader 功能以及模組提供的 SPI 定位可用方法的方法。 |
| 62 | DateFormat getDateFormat() |
| 63 | DeserializationConfig getDeserializationConfig() - 返回定義反序列化配置設定的共享預設 DeserializationConfig 物件的方法。 |
| 64 | DeserializationContext getDeserializationContext() - 用於獲取當前 DeserializationContext 的方法。 |
| 65 | JsonFactory getFactory() - 可以用來獲取此對映器使用的 JsonFactory 的方法,如果它需要構造 JsonParsers 和/或 JsonGenerators。 |
| 66 | InjectableValues getInjectableValues() |
| 67 | JsonFactory getJsonFactory() - 已棄用。 自 2.1 版起:請改用 getFactory() |
| 68 | JsonNodeFactory getNodeFactory() - 可以用來獲取此對映器在直接為樹構造根 JsonNode 例項時將使用的 JsonNodeFactory 的方法。 |
| 69 | PropertyNamingStrategy getPropertyNamingStrategy() |
| 70 | getSerializationConfig() - 返回用於定義序列化配置設定的共享預設 SerializationConfig 物件的方法。 |
| 71 | getSerializerFactory() - 獲取當前 SerializerFactory 的方法。 |
| 72 | getSerializerProvider() - 用於訪問“藍圖”(或工廠)例項的訪問器,透過呼叫 DefaultSerializerProvider.createInstance(com.fasterxml.jackson.databind.SerializationConfig, com.fasterxml.jackson.databind.ser.SerializerFactory) 從該例項建立例項。 |
| 73 | getSerializerProviderInstance() - 用於構造和返回可用於訪問序列化器的 SerializerProvider 例項的訪問器。 |
| 74 | getSubtypeResolver() - 用於訪問正在使用的子型別解析器的方法。 |
| 75 | getTypeFactory() - 獲取當前已配置的 TypeFactory 例項的訪問器。 |
| 76 | getVisibilityChecker<?>() - 用於訪問當前已配置的可見性檢查器的方法;該物件用於確定給定的屬性元素(方法、欄位、建構函式)是否可以自動檢測。 |
| 77 | isEnabled(DeserializationFeature f) - 用於檢查是否啟用了給定的特定於反序列化的功能的方法。 |
| 78 | isEnabled(JsonFactory.Feature f) - 等同於以下方法的便捷方法: |
| 79 | boolean isEnabled(JsonGenerator.Feature f) |
| 80 | boolean isEnabled(JsonParser.Feature f) |
| 81 | isEnabled(MapperFeature f) - 用於檢查是否啟用了給定的 MapperFeature 的方法。 |
| 82 | isEnabled(SerializationFeature f) - 用於檢查是否啟用了給定的特定於序列化的功能的方法。 |
| 83 | int mixInCount() |
| 84 | reader() - 用於構造具有預設設定的 ObjectReader 的工廠方法。 |
| 85 | reader(Base64Variant defaultBase64) - 用於構造 ObjectReader 的工廠方法,該 ObjectReader 將對 Base64 編碼的二進位制資料使用指定的 Base64 編碼變體。 |
| 86 | reader(Class<?> type) - 已棄用。自 2.5 版起,請改用 readerFor(Class)。 |
| 87 | reader(ContextAttributes attrs) - 用於構造將使用指定預設屬性的 ObjectReader 的工廠方法。 |
| 88 | reader(DeserializationFeature feature) - 用於構造具有指定功能啟用的 ObjectReader 的工廠方法(與該對映器例項具有的設定相比)。 |
| 89 | reader(DeserializationFeature first, DeserializationFeature... other) - 用於構造具有指定功能啟用的 ObjectReader 的工廠方法(與該對映器例項具有的設定相比)。 |
| 90 | reader(FormatSchema schema) - 用於構造 ObjectReader 的工廠方法,該 ObjectReader 將特定的模式物件傳遞給用於讀取內容的 JsonParser。 |
| 91 | reader(InjectableValues injectableValues) - 用於構造將使用指定的可注入值的 ObjectReader 的工廠方法。 |
| 92 | reader(JavaType type) - 已棄用。自 2.5 版起,請改用 readerFor(JavaType)。 |
| 93 | reader(JsonNodeFactory f) - 用於構造將使用指定的 JsonNodeFactory 構造 JSON 樹的 ObjectReader 的工廠方法。 |
| 94 | reader(TypeReference<?> type) - 已棄用。自 2.5 版起,請改用 readerFor(TypeReference)。 |
| 95 | readerFor(Class<?> type) - 用於構造將讀取或更新指定型別例項的 ObjectReader 的工廠方法。 |
| 96 | readerFor(JavaType type) - 用於構造將讀取或更新指定型別例項的 ObjectReader 的工廠方法。 |
| 97 | readerFor(TypeReference<?> type) - 用於構造將讀取或更新指定型別例項的 ObjectReader 的工廠方法。 |
| 98 | readerForUpdating(Object valueToUpdate) - 用於構造將使用 JSON 資料更新給定物件(通常是 Bean,但也可能是集合或對映,但不是陣列)的 ObjectReader 的工廠方法。 |
| 99 | readerWithView(Class<?> view) - 用於構造將使用指定的 JSON 檢視(過濾器)反序列化物件的 ObjectReader 的工廠方法。 |
| 100 | readTree(byte[] content) - 將 JSON 內容反序列化為使用一組 JsonNode 例項表示的樹的方法。 |
| 101 | readTree(File file) - 將 JSON 內容反序列化為使用一組 JsonNode 例項表示的樹的方法。 |
| 102 | readTree(InputStream in) - 將 JSON 內容反序列化為使用一組 JsonNode 例項表示的樹的方法。 |
| 103 | <T extends TreeNode> T readTree(JsonParser p) - 將 JSON 內容反序列化為使用一組 JsonNode 例項表示的樹的方法。 |
| 104 | readTree(Reader r) - 將 JSON 內容反序列化為使用一組 JsonNode 例項表示的樹的方法。 |
| 105 | readTree(String content) - 將 JSON 內容反序列化為使用一組 JsonNode 例項表示的樹的方法。 |
| 106 | readTree(URL source) - 將 JSON 內容反序列化為使用一組 JsonNode 例項表示的樹的方法。 |
| 107 | <T> T readValue(byte[] src, Class<T> valueType) |
| 108 | <T> T readValue(byte[] src, int offset, int len, Class<T> valueType) |
| 109 | <T> T readValue(byte[] src, int offset, int len, JavaType valueType) |
| 110 | <T> T readValue(byte[] src, int offset, int len, TypeReference valueTypeRef) |
| 111 | <T> T readValue(byte[] src, JavaType valueType) |
| 112 | <T> T readValue(byte[] src, TypeReference valueTypeRef) |
| 113 | <T> T readValue(DataInput src, Class<T> valueType) |
| 114 | <T> T readValue(DataInput src, JavaType valueType) |
| 115 | <T> T readValue(File src, Class<T> valueType) - 將給定檔案中的 JSON 內容反序列化為給定 Java 型別的方法。 |
| 116 | <T> T readValue(File src, JavaType valueType) - 將給定檔案中的 JSON 內容反序列化為給定 Java 型別的方法。 |
| 117 | <T> T readValue(File src, TypeReference valueTypeRef) - 將給定檔案中的 JSON 內容反序列化為給定 Java 型別的方法。 |
| 118 | <T> T readValue(InputStream src, Class<T> valueType) |
| 119 | <T> T readValue(InputStream src, JavaType valueType) |
| 120 | <T> T readValue(InputStream src, TypeReference valueTypeRef) |
| 121 | <T> T readValue(JsonParser p, Class<T> valueType) - 將 JSON 內容反序列化為非容器型別(但可以是陣列型別)的方法:通常是 Bean、陣列或包裝型別(如 Boolean)。 |
| 122 | <T> T readValue(JsonParser p, JavaType valueType) - 型別安全的過載方法,基本上是 readValue(JsonParser, Class) 的別名。 |
| 123 | <T> T readValue(JsonParser p, ResolvedType valueType) - 將 JSON 內容反序列化為 Java 型別的方法,對該型別的引用作為引數傳遞。 |
| 124 | <T> T readValue(JsonParser p, TypeReference<?> valueTypeRef) - 將 JSON 內容反序列化為 Java 型別的方法,對該型別的引用作為引數傳遞。 |
| 125 | <T> T readValue(Reader src, Class<T> valueType) - |
| 1 | <T> T readValue(Reader src, JavaType valueType) |
| 126 | <T> T readValue(Reader src, TypeReference valueTypeRef) |
| 127 | <T> T readValue(String content, Class<T> valueType) - 從給定的 JSON 內容字串反序列化 JSON 內容的方法。 |
| 128 | <T> T readValue(String content, JavaType valueType) - 從給定的 JSON 內容字串反序列化 JSON 內容的方法。 |
| 129 | <T> T readValue(String content, TypeReference valueTypeRef) - 從給定的 JSON 內容字串反序列化 JSON 內容的方法。 |
| 130 | <T> T readValue(URL src, Class<T> valueType) - 將給定資源中的 JSON 內容反序列化為給定 Java 型別的方法。 |
| 131 | <T> T readValue(URL src, JavaType valueType) |
| 132 | <T> T readValue(URL src, TypeReference valueTypeRef) - 將給定資源中的 JSON 內容反序列化為給定 Java 型別的方法。 |
| 133 | <T> MappingIterator<T> readValues(JsonParser p, Class<T> valueType) - 等同於以下方法的便捷方法: |
| 134 | <T> MappingIterator<T> readValues(JsonParser p, JavaType valueType) - 等同於以下方法的便捷方法: |
| 135 | <T> MappingIterator<T> readValues(JsonParser p, ResolvedType valueType) - 等同於以下方法的便捷方法: |
| 136 | <T> MappingIterator<T> readValues(JsonParser p, TypeReference<?>valueTypeRef) - 用於從解析器流讀取物件序列的方法。 |
| 137 | registerModule(Module module) - 用於註冊可以擴充套件此對映器提供的功能的模組的方法;例如,透過新增自定義序列化器和反序列化器的提供程式。 |
| 138 | registerModules(Iterable<Module> modules) - 用於按順序註冊指定模組的便捷方法;在功能上等同於: |
| 139 | registerModules(Module... modules) - 用於按順序註冊指定模組的便捷方法;在功能上等同於: |
| 140 | registerSubtypes(NamedType... types) - 用於將指定類註冊為子型別的方法,以便基於型別名稱的解析可以將超型別連結到子型別(作為使用註釋的替代方法)。 |
| 141 | setAnnotationIntrospector(AnnotationIntrospector ai) - 用於設定此對映器例項在序列化和反序列化中使用的 AnnotationIntrospector 的方法。 |
| 142 | setAnnotationIntrospectors(AnnotationIntrospector serializerAI, AnnotationIntrospector deserializerAI) - 用於更改此對映器例項用於序列化和反序列化的 AnnotationIntrospector 例項的方法,分別指定它們以便不同的內省可用於不同的方面。 |
| 143 | setBase64Variant(Base64Variant v) - 用於配置 byte[] 序列化器和反序列化器將使用的預設 Base64Variant 的方法。 |
| 144 | setConfig(DeserializationConfig config) - 允許覆蓋底層 DeserializationConfig 物件的方法。 |
| 145 | setConfig(SerializationConfig config) - 允許覆蓋底層 SerializationConfig 物件的方法,該物件包含特定於序列化的配置設定。 |
| 146 | setDateFormat(DateFormat dateFormat) - 用於配置在將時間值序列化為字串和從 JSON 字串反序列化時使用的預設 DateFormat 的方法。 |
| 147 | setDefaultPrettyPrinter(PrettyPrinter pp) - 用於指定在啟用“預設漂亮列印”(透過啟用 SerializationFeature.INDENT_OUTPUT)時使用的 PrettyPrinter 的方法。 |
| 148 | setDefaultTyping(TypeResolverBuilder<?> typer) - 用於啟用自動包含型別資訊的方法,使用指定的處理程式物件來確定這會影響哪些型別,以及如何嵌入資訊。 |
| 149 | setFilterProvider(FilterProvider filterProvider) - 用於配置此對映器以使用指定的 FilterProvider 將過濾器 ID 對映到實際過濾器例項的方法。 |
| 150 | setHandlerInstantiator(HandlerInstantiator hi) - 用於配置 HandlerInstantiator 以建立處理程式(如序列化器、反序列化器、型別和型別 ID 解析器)例項的方法,給定一個類。 |
| 151 | setInjectableValues(InjectableValues injectableValues) - 用於配置用於查詢要注入的值的 InjectableValues 的方法。 |
| 152 | setLocale(Locale l) - 用於覆蓋用於格式化的預設區域設定的方法。 |
| 153 | setMixInAnnotations(Map<Class<?>,Class<?>> sourceMixins) - 已棄用。自 2.5 版起:已替換為該方法的流暢形式;setMixIns(java.util.Map<java.lang.Class<?>, java.lang.Class<?>>)。 |
| 154 | ObjectMapper setMixInResolver(ClassIntrospector.MixInResolver resolver) - 用於指定查詢要使用的 mix-in 類解析器的方法,覆蓋直接新增的對映。 |
| 155 | ObjectMapper setMixIns(Map<Class<?>,Class<?>> sourceMixins) - 用於定義 mix-in 註解的方法,這些註解用於增強可處理(可序列化/可反序列化)類具有的註解。 |
| 156 | ObjectMapper setNodeFactory(JsonNodeFactory f) - 用於指定 JsonNodeFactory 的方法,該工廠用於構建根級樹節點(透過方法 createObjectNode())。 |
| 157 | ObjectMapper setPropertyInclusion(JsonInclude.Value incl) - 用於設定序列化預設 POJO 屬性包含策略的方法。 |
| 158 | ObjectMapper setPropertyNamingStrategy(PropertyNamingStrategy s) - 用於設定要使用的自定義屬性命名策略的方法。 |
| 159 | ObjectMapper setSerializationInclusion(JsonInclude.Include incl) - 方便方法,等效於呼叫。 |
| 160 | ObjectMapper setSerializerFactory(SerializerFactory f) - 用於設定用於構建(bean)序列化器的特定 SerializerFactory 的方法。 |
| 161 | ObjectMapper setSerializerProvider(DefaultSerializerProvider p) - 用於設定“藍圖”SerializerProvider 例項的方法,該例項用作實際提供程式例項的基礎,用於處理 JsonSerializer 例項的快取。 |
| 162 | ObjectMapper setSubtypeResolver(SubtypeResolver str) - 用於設定要使用的自定義子型別解析器的方法。 |
| 163 | ObjectMapper setTimeZone(TimeZone tz) - 用於覆蓋用於格式化的預設時區的方法。 |
| 164 | ObjectMapper setTypeFactory(TypeFactory f) - 可用於覆蓋此對映器使用的 TypeFactory 例項的方法。 |
| 165 | ObjectMapper setVisibility(PropertyAccessor forMethod, JsonAutoDetect.Visibility visibility) - 方便方法,允許更改底層 VisibilityCheckers 的配置,以更改自動檢測哪些型別的屬性的詳細資訊。 |
| 166 | ObjectMapper setVisibility(VisibilityChecker<?> vc) - 用於設定當前配置的 VisibilityChecker 的方法,該物件用於確定是否可以自動檢測給定的屬性元素(方法、欄位、建構函式)。 |
| 167 | void setVisibilityChecker(VisibilityChecker<?> vc) - 已棄用。從 2.6 版開始,請改用 setVisibility(VisibilityChecker)。 |
| 168 | JsonParser treeAsTokens(TreeNode n) - 用於根據 JSON 樹表示構建 JsonParser 的方法。 |
| 169 | <T> T treeToValue(TreeNode n, Class<T> valueType) - 方便的轉換方法,它會將給定 JSON 樹包含的資料繫結到特定的值(通常是 bean)型別。 |
| 170 | <T extends JsonNode> T valueToTree(Object fromValue) - treeToValue(com.fasterxml.jackson.core.TreeNode, java.lang.Class<T>) 的反向操作;給定一個值(通常是 bean),將構建等效的 JSON 樹表示。 |
| 171 | Version version() - 用於返回儲存在包含此類的 jar 中並從中讀取的版本資訊的方法。 |
| 172 | ObjectWriter writer() - 用於使用預設設定構建 ObjectWriter 的便捷方法。 |
| 173 | ObjectWriter writer(Base64Variant defaultBase64) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將對 Base64 編碼的二進位制資料使用指定的 Base64 編碼變體。 |
| 174 | ObjectWriter writer(CharacterEscapes escapes) - |
| 175 | ObjectWriter writer(ContextAttributes attrs) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用指定的預設屬性。 |
| 176 | ObjectWriter writer(DateFormat df) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用指定的 DateFormat 序列化物件;或者,如果傳遞 null,則使用時間戳(64 位數字)。 |
| 177 | ObjectWriter writer(FilterProvider filterProvider) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用指定的過濾器提供程式序列化物件。 |
| 178 | ObjectWriter writer(FormatSchema schema) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將特定的 schema 物件傳遞給用於寫入內容的 JsonGenerator。 |
| 179 | ObjectWriter writer(PrettyPrinter pp) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用指定的漂亮印表機進行縮排以序列化物件(或者如果為 null,則不使用漂亮印表機)。 |
| 180 | ObjectWriter writer(SerializationFeature feature) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將啟用指定的特性(與此對映器例項具有的設定相比)。 |
| 181 | ObjectWriter writer(SerializationFeature first, SerializationFeature... other) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將啟用指定的特性(與此對映器例項具有的設定相比)。 |
| 182 | ObjectWriter writerFor(Class<?> rootType) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用指定的根型別序列化物件,而不是值的實際執行時型別。 |
| 183 | ObjectWriter writerFor(JavaType rootType) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用指定的根型別序列化物件,而不是值的實際執行時型別。 |
| 184 | ObjectWriter writerFor(TypeReference<?> rootType) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用指定的根型別序列化物件,而不是值的實際執行時型別。 |
| 185 | ObjectWriter writerWithDefaultPrettyPrinter() - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用預設漂亮印表機進行縮排以序列化物件。 |
| 186 | ObjectWriter writerWithType(Class<?> rootType) - 已棄用。從 2.5 版開始,請改用 writerFor(Class)。 |
| 187 | ObjectWriter writerWithType(JavaType rootType) - 已棄用。從 2.5 版開始,請改用 writerFor(JavaType)。 |
| 188 | ObjectWriter writerWithType(TypeReference<?> rootType) - 已棄用。從 2.5 版開始,請改用 writerFor(TypeReference)。 |
| 189 | ObjectWriter writerWithView(Class<?> serializationView) - 用於構建 ObjectWriter 的工廠方法,該 ObjectWriter 將使用指定的 JSON 檢視(過濾器)序列化物件。 |
| 190 | void writeTree(JsonGenerator jgen, JsonNode rootNode) - 用於使用提供的生成器序列化給定 JSON 樹的方法。 |
| 191 | void writeTree(JsonGenerator jgen, TreeNode rootNode) |
| 192 | void writeValue(DataOutput out, Object value) |
| 193 | void writeValue(File resultFile, Object value) - 可用於將任何 Java 值序列化為 JSON 輸出並寫入提供的 File 的方法。 |
| 194 | void writeValue(JsonGenerator g, Object value) - 可用於使用提供的 JsonGenerator 將任何 Java 值序列化為 JSON 輸出的方法。 |
| 195 | void writeValue(OutputStream out, Object value) - 可用於使用提供的輸出流(使用編碼 JsonEncoding.UTF8)將任何 Java 值序列化為 JSON 輸出的方法。 |
| 196 | void writeValue(Writer w, Object value) - 可用於使用提供的 Writer 將任何 Java 值序列化為 JSON 輸出的方法。 |
| 197 | byte[] writeValueAsBytes(Object value) - 可用於將任何 Java 值序列化為位元組陣列的方法。 |
| 198 | String writeValueAsString(Object value) - 可用於將任何 Java 值序列化為字串的方法。 |
繼承的方法
此類繼承自以下類的方法
java.lang.Object
ObjectMapper 示例
使用您選擇的任何編輯器建立以下 Java 程式,例如在 C:/> Jackson_WORKSPACE 中。
檔案:JacksonTester.java
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
//map json to student
try{
Student student = mapper.readValue(jsonString, Student.class);
System.out.println(student);
jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student);
System.out.println(jsonString);
}
catch (JsonParseException e) { e.printStackTrace();}
catch (JsonMappingException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}
物件序列化
讓我們將一個 Java 物件序列化到一個 json 檔案中,然後讀取該 json 檔案以獲取該物件。在此示例中,我們建立了 Student 類。我們將建立一個 student.json 檔案,其中將包含 Student 物件的 json 表示形式。
在C:\>Jackson_WORKSPACE中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
tester.writeJSON(student);
Student student1 = tester.readJSON();
System.out.println(student1);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void writeJSON(Student student) throws JsonGenerationException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("student.json"), student);
}
private Student readJSON() throws JsonParseException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue(new File("student.json"), Student.class);
return student;
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Student [ name: Mahesh, age: 10 ]
資料繫結
資料繫結 API 用於使用屬性訪問器或使用註解將 JSON 轉換為 POJO(普通舊 Java 物件)以及從 POJO 轉換 JSON。它分為兩種型別。
簡單資料繫結 - 將 JSON 轉換為 Java Maps、Lists、Strings、Numbers、Booleans 和 null 物件,反之亦然。
完整資料繫結 - 將 JSON 轉換為任何 JAVA 型別,反之亦然。
ObjectMapper 讀取/寫入這兩種型別的資料繫結的 JSON。資料繫結是最方便的方法,類似於 XML 的 JAXB 解析器。
簡單資料繫結
簡單資料繫結是指將 JSON 對映到 JAVA 核心資料型別。下表說明了 JSON 型別與 Java 型別之間的關係。
| 序號 | JSON 型別 | Java 型別 |
|---|---|---|
| 1 | 物件 | LinkedHashMap<String,Object> |
| 2 | 陣列 | ArrayList<Object> |
| 3 | 字串 | String |
| 4 | 整數 | Integer、Long 或 BigInteger |
| 5 | 小數 | Double / BigDecimal |
| 6 | true | false | Boolean |
| 7 | null | null |
讓我們看看簡單資料繫結的實際應用。在這裡,我們將 JAVA 基本型別直接對映到 JSON,反之亦然。
在C:\>Jackson_WORKSPACE中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> studentDataMap = new HashMap<String,Object>();
int[] marks = {1,2,3};
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
// JAVA Object
studentDataMap.put("student", student);
// JAVA String
studentDataMap.put("name", "Mahesh Kumar");
// JAVA Boolean
studentDataMap.put("verified", Boolean.FALSE);
// Array
studentDataMap.put("marks", marks);
mapper.writeValue(new File("student.json"), studentDataMap);
//result student.json
//{
// "student":{"name":"Mahesh","age":10},
// "marks":[1,2,3],
// "verified":false,
// "name":"Mahesh Kumar"
//}
studentDataMap = mapper.readValue(new File("student.json"), Map.class);
System.out.println(studentDataMap.get("student"));
System.out.println(studentDataMap.get("name"));
System.out.println(studentDataMap.get("verified"));
System.out.println(studentDataMap.get("marks"));
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]
完整資料繫結
完整資料繫結是指將 JSON 對映到任何 JAVA 物件。
//Create an ObjectMapper instance
ObjectMapper mapper = new ObjectMapper();
//map JSON content to Student object
Student student = mapper.readValue(new File("student.json"), Student.class);
//map Student object to JSON content
mapper.writeValue(new File("student.json"), student);
讓我們看看簡單資料繫結的實際應用。在這裡,我們將 JAVA 物件直接對映到 JSON,反之亦然。
在C:\>Jackson_WORKSPACE中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
tester.writeJSON(student);
Student student1 = tester.readJSON();
System.out.println(student1);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void writeJSON(Student student) throws JsonGenerationException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("student.json"), student);
}
private Student readJSON() throws JsonParseException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue(new File("student.json"), Student.class);
return student;
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Student [ name: Mahesh, age: 10 ]
使用泛型的資料繫結
在簡單資料繫結中,我們使用了 Map 類,該類使用 String 作為鍵,使用 Object 作為值物件。相反,我們可以擁有具體的 Java 物件並將其型別轉換以用於 JSON 繫結。
考慮以下使用 UserData 類的示例,UserData 類用於儲存使用者特定資料。
在C:\>Jackson_WORKSPACE中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
ObjectMapper mapper = new ObjectMapper();
Map<String, UserData> userDataMap = new HashMap<String, UserData>();
UserData studentData = new UserData();
int[] marks = {1,2,3};
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
// JAVA Object
studentData.setStudent(student);
// JAVA String
studentData.setName("Mahesh Kumar");
// JAVA Boolean
studentData.setVerified(Boolean.FALSE);
// Array
studentData.setMarks(marks);
TypeReference ref = new TypeReference<Map<String,UserData>>() { };
userDataMap.put("studentData1", studentData);
mapper.writeValue(new File("student.json"), userDataMap);
//{
// "studentData1":
// {
// "student":
// {
// "name":"Mahesh",
// "age":10
// },
// "name":"Mahesh Kumar",
// "verified":false,
// "marks":[1,2,3]
// }
//}
userDataMap = mapper.readValue(new File("student.json"), ref);
System.out.println(userDataMap.get("studentData1").getStudent());
System.out.println(userDataMap.get("studentData1").getName());
System.out.println(userDataMap.get("studentData1").getVerified());
System.out.println(Arrays.toString(userDataMap.get("studentData1").getMarks()));
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int age;
public Student(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
class UserData {
private Student student;
private String name;
private Boolean verified;
private int[] marks;
public UserData(){}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getVerified() {
return verified;
}
public void setVerified(Boolean verified) {
this.verified = verified;
}
public int[] getMarks() {
return marks;
}
public void setMarks(int[] marks) {
this.marks = marks;
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Student [ name: Mahesh, age: 10 ] Mahesh Kumar false [1, 2, 3]
樹模型
樹模型準備 JSON 文件的記憶體中樹表示。ObjectMapper 構建 JsonNode 節點的樹。這是最靈活的方法。它類似於 XML 的 DOM 解析器。
從 JSON 建立樹
ObjectMapper 在讀取 JSON 後提供指向樹的根節點的指標。根節點可用於遍歷整棵樹。請考慮以下程式碼片段以獲取提供的 JSON 字串的根節點。
//Create an ObjectMapper instance
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
//create tree from JSON
JsonNode rootNode = mapper.readTree(jsonString);
遍歷樹模型
在遍歷樹時,使用相對於根節點的相對路徑獲取每個節點並處理資料。請考慮以下程式碼片段,該片段在提供根節點的情況下遍歷樹。
JsonNode nameNode = rootNode.path("name");
System.out.println("Name: "+ nameNode.textValue());
JsonNode marksNode = rootNode.path("marks");
Iterator<JsonNode> iterator = marksNode.elements();
示例
在C:\>Jackson_WORKSPACE中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.IOException;
import java.util.Iterator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
try {
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
JsonNode rootNode = mapper.readTree(jsonString);
JsonNode nameNode = rootNode.path("name");
System.out.println("Name: "+ nameNode.textValue());
JsonNode ageNode = rootNode.path("age");
System.out.println("Age: " + ageNode.intValue());
JsonNode verifiedNode = rootNode.path("verified");
System.out.println("Verified: " + (verifiedNode.booleanValue() ? "Yes":"No"));
JsonNode marksNode = rootNode.path("marks");
Iterator<JsonNode> iterator = marksNode.elements();
System.out.print("Marks: [ ");
while (iterator.hasNext()) {
JsonNode marks = iterator.next();
System.out.print(marks.intValue() + " ");
}
System.out.println("]");
}
catch (JsonParseException e) { e.printStackTrace(); }
catch (JsonMappingException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Name: Mahesh Kumar Age: 21 Verified: No Marks: [ 100 90 85 ]
樹到 JSON
在此示例中,我們使用 JsonNode 建立了一棵樹,並將其寫入 json 檔案並讀回。
在C:\>Jackson_WORKSPACE中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.IOException;
import java.util.Iterator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
try {
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
JsonNode rootNode = mapper.readTree(jsonString);
JsonNode nameNode = rootNode.path("name");
System.out.println("Name: "+ nameNode.textValue());
JsonNode ageNode = rootNode.path("age");
System.out.println("Age: " + ageNode.intValue());
JsonNode verifiedNode = rootNode.path("verified");
System.out.println("Verified: " + (verifiedNode.booleanValue() ? "Yes":"No"));
JsonNode marksNode = rootNode.path("marks");
Iterator<JsonNode> iterator = marksNode.elements();
System.out.print("Marks: [ ");
while (iterator.hasNext()) {
JsonNode marks = iterator.next();
System.out.print(marks.intValue() + " ");
}
System.out.println("]");
}
catch (JsonParseException e) { e.printStackTrace(); }
catch (JsonMappingException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Name: Mahesh Kumar Age: 21 Verified: No Marks: [ 100 90 85 ]
樹到 Java 物件
在此示例中,我們使用 JsonNode 建立了一棵樹,並將其寫入 json 檔案並讀回樹,然後將其轉換為 Student 物件。
在C:\>Jackson_WORKSPACE中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.createObjectNode();
JsonNode marksNode = mapper.createArrayNode();
((ArrayNode)marksNode).add(100);
((ArrayNode)marksNode).add(90);
((ArrayNode)marksNode).add(85);
((ObjectNode) rootNode).put("name", "Mahesh Kumar");
((ObjectNode) rootNode).put("age", 21);
((ObjectNode) rootNode).put("verified", false);
((ObjectNode) rootNode).put("marks",marksNode);
mapper.writeValue(new File("student.json"), rootNode);
rootNode = mapper.readTree(new File("student.json"));
Student student = mapper.treeToValue(rootNode, Student.class);
System.out.println("Name: "+ student.getName());
System.out.println("Age: " + student.getAge());
System.out.println("Verified: " + (student.isVerified() ? "Yes":"No"));
System.out.println("Marks: "+Arrays.toString(student.getMarks()));
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
String name;
int age;
boolean verified;
int[] marks;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isVerified() {
return verified;
}
public void setVerified(boolean verified) {
this.verified = verified;
}
public int[] getMarks() {
return marks;
}
public void setMarks(int[] marks) {
this.marks = marks;
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Name: Mahesh Kumar Age: 21 Verified: No Marks: [ 100 90 85 ]
流式 API
流式 API 將 JSON 內容讀寫為離散事件。JsonParser 讀取資料,而 JsonGenerator 寫入資料。這三種方法中最強大的一種,開銷最低,讀寫操作速度最快。它類似於 XML 的 Stax 解析器。
在本文中,我們將展示如何使用 Jackson 流式 API 讀取和寫入 JSON 資料。流式 API 使用標記的概念,並且必須仔細處理 Json 的每個細節。以下是我們將在示例中使用的兩個類
JsonGenerator - 寫入 JSON 字串。
JsonParser - 解析 JSON 字串。
使用 JsonGenerator 寫入 JSON
使用 JsonGenerator 非常簡單。首先使用 JsonFactory.createJsonGenerator() 方法建立 JsonGenerator,然後使用其 write***() 方法寫入每個 json 值。
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File(
"student.json"), JsonEncoding.UTF8);
// {
jsonGenerator.writeStartObject();
// "name" : "Mahesh Kumar"
jsonGenerator.writeStringField("name", "Mahesh Kumar");
讓我們看看 JsonGenerator 的實際應用。在 C:\>Jackson_WORKSPACE 中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.Map;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
try {
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File("student.json"), JsonEncoding.UTF8);
jsonGenerator.writeStartObject();
// "name" : "Mahesh Kumar"
jsonGenerator.writeStringField("name", "Mahesh Kumar");
// "age" : 21
jsonGenerator.writeNumberField("age", 21);
// "verified" : false
jsonGenerator.writeBooleanField("verified", false);
// "marks" : [100, 90, 85]
jsonGenerator.writeFieldName("marks");
// [
jsonGenerator.writeStartArray();
// 100, 90, 85
jsonGenerator.writeNumber(100);
jsonGenerator.writeNumber(90);
jsonGenerator.writeNumber(85);
// ]
jsonGenerator.writeEndArray();
jsonGenerator.writeEndObject();
jsonGenerator.close();
//result student.json
//{
// "name":"Mahesh Kumar",
// "age":21,
// "verified":false,
// "marks":[100,90,85]
//}
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> dataMap = mapper.readValue(new File("student.json"), Map.class);
System.out.println(dataMap.get("name"));
System.out.println(dataMap.get("age"));
System.out.println(dataMap.get("verified"));
System.out.println(dataMap.get("marks"));
}
catch (JsonParseException e) { e.printStackTrace(); }
catch (JsonMappingException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Mahesh Kumar 21 false [100, 90, 85]
使用 JsonParser 讀取 JSON
使用 JsonParser 同樣非常簡單。首先使用 JsonFactory.createJsonParser() 方法建立 JsonParser,然後使用其 nextToken() 方法將每個 json 字串讀取為標記。檢查每個標記並相應地進行處理
JsonFactory jasonFactory = new JsonFactory();
JsonParser jsonParser = jasonFactory.createJsonParser(new File("student.json"));
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
//get the current token
String fieldname = jsonParser.getCurrentName();
if ("name".equals(fieldname)) {
//move to next token
jsonParser.nextToken();
System.out.println(jsonParser.getText());
}
}
讓我們看看 JsonParser 的實際應用。在 C:\>Jackson_WORKSPACE 中建立一個名為 JacksonTester 的 Java 類檔案。
檔案:JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.Map;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File(
"student.json"), JsonEncoding.UTF8);
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("name", "Mahesh Kumar");
jsonGenerator.writeNumberField("age", 21);
jsonGenerator.writeBooleanField("verified", false);
jsonGenerator.writeFieldName("marks");
jsonGenerator.writeStartArray(); // [
jsonGenerator.writeNumber(100);
jsonGenerator.writeNumber(90);
jsonGenerator.writeNumber(85);
jsonGenerator.writeEndArray();
jsonGenerator.writeEndObject();
jsonGenerator.close();
//result student.json
//{
// "name":"Mahesh Kumar",
// "age":21,
// "verified":false,
// "marks":[100,90,85]
//}
JsonParser jsonParser = jsonFactory.createParser(new File("student.json"));
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
//get the current token
String fieldname = jsonParser.getCurrentName();
if ("name".equals(fieldname)) {
//move to next token
jsonParser.nextToken();
System.out.println(jsonParser.getText());
}
if("age".equals(fieldname)){
//move to next token
jsonParser.nextToken();
System.out.println(jsonParser.getNumberValue());
}
if("verified".equals(fieldname)){
//move to next token
jsonParser.nextToken();
System.out.println(jsonParser.getBooleanValue());
}
if("marks".equals(fieldname)){
//move to [
jsonParser.nextToken();
// loop till token equal to "]"
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
System.out.println(jsonParser.getNumberValue());
}
}
}
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
驗證結果
使用javac編譯器編譯類,如下所示
C:\Jackson_WORKSPACE>javac JacksonTester.java
現在執行 jacksonTester 以檢視結果
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Mahesh Kumar 21 false [100, 90, 85]
JsonGenerator 類
簡介
JsonParser 是定義用於讀取 Json 內容的公共 API 的基類。例項是使用 JsonFactory 例項的工廠方法建立的。
類宣告
以下是 org.codehaus.jackson.JsonParser 類的宣告
public abstract class JsonParser
extends Object
implements Closeable, Versioned
巢狀類
| 序號 | 類和描述 |
|---|---|
| 1 | static class JsonParser.Feature 列舉,定義解析器的所有可切換功能。 |
| 2 | static class JsonParser.NumberType 列舉,表示可用於數字的可能的“原生”(最佳)型別。 |
欄位
protected PrettyPrinter _cfgPrettyPrinter - 在輸出期間處理漂亮列印(通常是其他空格以使結果更易於人類閱讀)的物件。
protected JsonToken _currToken - 透過 nextToken() 獲取的最後一個標記(如果有)。
protected int _features - 由指示哪些 JsonParser.Features 已啟用的位組成的位標誌。
protected JsonToken _lastClearedToken - 最後一個清除的標記(如果有):即,呼叫 clearCurrentToken() 時有效的標記。
建構函式
| 序號 | 建構函式和描述 |
|---|---|
| 1 | protected JsonParser() 預設建構函式 |
| 2 | protected JsonParser(int features) |
類方法
| 序號 | 方法和描述 |
|---|---|
| 1 | protected void _reportError(String msg) - 用於使用給定的基本訊息構建和丟擲 JsonGenerationException 的幫助器方法。 |
| 2 | protected void _reportUnsupportedOperation() |
| 3 | protected void _throwInternal() |
| 4 | protected void _writeSimpleObject(Object value)- 用於嘗試為給定的無型別物件呼叫適當的寫入方法的輔助方法。 |
| 5 | boolean canOmitFields() - 用於檢查是否可以省略寫入物件欄位的內省方法。 |
| 6 | boolean canUseSchema(FormatSchema schema) - 可用於驗證給定模式是否可與此生成器一起使用的方法(使用 setSchema(com.fasterxml.jackson.core.FormatSchema))。 |
| 7 | boolean canWriteBinaryNatively() - 內省方法,可呼叫以檢視底層資料格式是否支援“原生”二進位制資料;也就是說,無需編碼即可高效輸出二進位制內容。 |
| 8 | boolean canWriteObjectId() - 內省方法,可呼叫以檢視底層資料格式是否原生支援某種物件 ID(許多格式不支援;例如,JSON 不支援)。 |
| 9 | boolean canWriteTypeId() - 內省方法,可呼叫以檢視底層資料格式是否原生支援某種型別 ID(許多格式不支援;例如,JSON 不支援)。 |
| 10 | abstract void close() - 用於關閉此生成器的方法,以便不再寫入任何內容。 |
| 11 | JsonGenerator configure(JsonGenerator.Feature f, boolean state) - 用於啟用或停用指定功能的方法:檢查 JsonGenerator.Feature 以獲取可用功能列表。 |
| 12 | void copyCurrentEvent(JsonParser jp) - 用於複製給定解析器例項指向的當前事件內容的方法。 |
| 13 | void copyCurrentStructure(JsonParser jp) - 用於複製給定解析器例項指向的當前事件及其包含的後續事件內容的方法。 |
| 14 | abstract JsonGenerator disable(JsonGenerator.Feature f) - 用於停用指定功能的方法(檢查 JsonGenerator.Feature 以獲取功能列表) |
| 15 | abstract JsonGenerator enable(JsonGenerator.Feature f) - 用於啟用指定解析器功能的方法:檢查 JsonGenerator.Feature 以獲取可用功能列表。 |
| 16 | abstract void flush() - 用於將任何緩衝內容重新整理到底層目標(輸出流、寫入器)以及重新整理目標本身的方法。 |
| 17 | CharacterEscapes getCharacterEscapes() - 用於訪問自定義轉義工廠為其建立的 JsonGenerator 使用的方法。 |
| 18 | abstract ObjectCodec getCodec() - 用於訪問用於將 Java 物件作為 Json 內容寫入的物件的方法(使用 writeObject(java.lang.Object) 方法)。 |
| 19 | abstract int getFeatureMask() - 用於獲取所有標準 JsonGenerator.Features 狀態的批次訪問方法。 |
| 20 | int getHighestEscapedChar() - 用於測試為此生成器配置的最高未跳脫字元是什麼的訪問器方法。 |
| 21 | abstract JsonStreamContext getOutputContext() |
| 22 | Object getOutputTarget()- 可用於訪問用作生成輸出目標的物件的方法;這通常是 OutputStream 或 Writer,具體取決於生成器是用什麼構造的。 |
| 23 | PrettyPrinter getPrettyPrinter()- 用於檢查此生成器是否配置了 PrettyPrinter 的訪問器;如果已配置,則返回它,如果未配置則返回 null。 |
| 24 | FormatSchema getSchema() - 用於訪問此解析器使用的模式(如果有)的方法。 |
| 25 | abstract boolean isClosed() - 可呼叫以確定此生成器是否已關閉的方法。 |
| 26 | abstract boolean isEnabled(JsonGenerator.Feature f) - 用於檢查給定功能是否已啟用的方法。 |
| 27 | JsonGenerator setCharacterEscapes(CharacterEscapes esc)- 用於定義自定義轉義工廠為其建立的 JsonGenerator 使用的方法。 |
| 28 | abstract JsonGenerator setCodec(ObjectCodec oc)- 可呼叫以設定或重置用於將 Java 物件作為 JsonContent 寫入的物件的方法(使用 writeObject(java.lang.Object) 方法)。 |
| 29 | abstract JsonGenerator setFeatureMask(int mask)- 用於(重新)設定所有標準 JsonGenerator.Features 狀態的批次設定方法 |
| 30 | JsonGenerator setHighestNonEscapedChar(int charCode) - 可呼叫以請求生成器轉義所有高於指定程式碼點的字元程式碼(如果為正值);或者,除了必須為資料格式轉義的字元外,不轉義任何字元(如果為 -1)。 |
| 31 | JsonGenerator setPrettyPrinter(PrettyPrinter pp) - 用於設定自定義漂亮列印程式的方法,該程式通常用於新增縮排以提高人類可讀性。 |
| 32 | JsonGenerator setRootValueSeparator(SerializableString sep) - 用於覆蓋用於分隔根級 JSON 值的字串的方法(預設為單個空格字元) |
| 33 | void setSchema(FormatSchema schema) - 用於呼叫以使此生成器使用指定模式的方法。 |
| 33 | abstract JsonGenerator useDefaultPrettyPrinter()- 用於使用預設漂亮列印程式 (DefaultPrettyPrinter) 啟用漂亮列印的便捷方法。 |
| 34 | abstract Version version()- 用於查詢提供此生成器例項的捆綁包版本的訪問器。 |
| 35 | void writeArrayFieldStart(String fieldName)- 用於輸出欄位條目(“成員”(將包含 JSON 陣列值))和 START_ARRAY 標記的便捷方法。 |
| 36 | abstract void writeBinary(Base64Variant b64variant, byte[] data, int offset, int len)- 用於將給定的二進位制資料塊作為 base64 編碼輸出為完整字串值(用雙引號括起來)的方法。 |
| 37 | abstract int writeBinary(Base64Variant b64variant, InputStream data, int dataLength) - 與 writeBinary(Base64Variant,byte[],int,int) 類似的方法,但輸入透過流提供,允許增量寫入而無需將整個輸入儲存在記憶體中。 |
| 38 | void writeBinary(byte[] data)- 類似於 writeBinary(Base64Variant,byte[],int,int),但假設預設使用 Jackson 預設 Base64 變體(即 Base64Variants.MIME_NO_LINEFEEDS)。 |
| 39 | void writeBinary(byte[] data, int offset, int len) - 類似於 writeBinary(Base64Variant,byte[],int,int),但預設使用 Jackson 預設 Base64 變體(即 Base64Variants.MIME_NO_LINEFEEDS)。 |
| 40 | int writeBinary(InputStream data, int dataLength) - 類似於 writeBinary(Base64Variant,InputStream,int),但假設預設使用 Jackson 預設 Base64 變體(即 Base64Variants.MIME_NO_LINEFEEDS)。 |
| 41 | void writeBinaryField(String fieldName, byte[] data) - 用於輸出包含指定資料(以 base64 編碼形式)的欄位條目(“成員”)的便捷方法。 |
| 42 | abstract void writeBoolean(boolean state) - 用於輸出文字 Json 布林值('true' 和 'false' 字串之一)的方法。 |
| 43 | void writeBooleanField(String fieldName, boolean value) - 用於輸出具有布林值的欄位條目(“成員”)的便捷方法。 |
| 44 | abstract void writeEndArray() - 用於寫入 JSON 陣列值的結束標記(字元 ']';如果啟用了漂亮列印,則加上可能的空白裝飾)的方法。 |
| 45 | abstract void writeEndObject() - 用於寫入 JSON 物件值的結束標記(字元 '}';如果啟用了漂亮列印,則加上可能的空白裝飾)的方法。 |
| 46 | abstract void writeFieldName(SerializableString name) - 與 writeFieldName(String) 類似的方法,主要區別在於它可能效能更好,因為某些處理(例如某些字元的引用或編碼到外部編碼(如果生成器支援))可以只執行一次並重複用於後續呼叫。 |
| 47 | abstract void writeFieldName(String name) - 用於寫入欄位名稱(用雙引號括起來的 JSON 字串:在語法上與 JSON 字串值相同),如果啟用了漂亮列印,則可能由空白裝飾。 |
| 48 | abstract void writeNull() - 用於輸出文字 Json null 值的方法。 |
| 49 | void writeNullField(String fieldName) - 用於輸出具有 JSON 文字值 null 的欄位條目(“成員”)的便捷方法。 |
| 50 | abstract void writeNumber(BigDecimal dec) - 用於輸出指示 Json 數值的方法。 |
| 51 | abstract void writeNumber(BigInteger v) - 用於將給定值輸出為 Json 數字的方法。 |
| 52 | abstract void writeNumber(double d) - 用於輸出指示 Json 數值的方法。 |
| 53 | abstract void writeNumber(float f) - 用於輸出指示 Json 數值的方法。 |
| 54 | abstract void writeNumber(int v) - 用於將給定值輸出為 Json 數字的方法。 |
| 55 | abstract void writeNumber(long v) - 用於將給定值輸出為 Json 數字的方法。 |
| 56 | void writeNumber(short v) - 用於將給定值輸出為 Json 數字的方法。 |
| 57 | abstract void writeNumber(String encodedValue) - 可用於無法(輕鬆?)轉換為“標準”Java 數字型別的自定義數字型別的方法。 |
| 58 | void writeNumberField(String fieldName, BigDecimal value) - 用於輸出具有指定數值的欄位條目(“成員”)的便捷方法。 |
| 59 | void writeNumberField(String fieldName, double value) - 用於輸出具有指定數值的欄位條目(“成員”)的便捷方法。 |
| 60 | void writeNumberField(String fieldName, float value) - 用於輸出具有指定數值的欄位條目(“成員”)的便捷方法。 |
| 61 | void writeNumberField(String fieldName, int value) - 用於輸出具有指定數值的欄位條目(“成員”)的便捷方法。 |
| 62 | void writeNumberField(String fieldName, long value) - 用於輸出具有指定數值的欄位條目(“成員”)的便捷方法。 |
| 63 | abstract void writeObject(Object pojo) - 用於將給定的 Java 物件(POJO)作為 Json 寫入的方法。 |
| 64 | void writeObjectField(String fieldName, Object pojo) - 用於輸出具有特定 Java 物件的內容作為其值的欄位條目(“成員”)的便捷方法。 |
| 65 | void writeObjectFieldStart(String fieldName) - 用於輸出欄位條目(“成員”(將包含 JSON 物件值))和 START_OBJECT 標記的便捷方法。 |
| 66 | void writeObjectId(Object id) - 可呼叫以輸出所謂的原生物件 ID 的方法。 |
| 67 | void writeObjectRef(Object id) - 可呼叫以輸出對原生物件 ID 的引用的方法。 |
| 68 | void writeOmittedField(String fieldName) 用於指示此位置的屬性已跳過的方法。 |
| 69 | abstract void writeRaw(char c) - 用於強制生成器逐字複製輸入文字而無需修改的方法(包括不執行轉義,即使上下文[陣列、物件]否則需要這樣做也不新增分隔符)。 |
| 70 | abstract void writeRaw(char[] text, int offset, int len) - 用於強制生成器逐字複製輸入文字而無需修改的方法(包括不執行轉義,即使上下文[陣列、物件]否則需要這樣做也不新增分隔符)。 |
| 71 | void writeRaw(SerializableString raw) - 用於強制生成器逐字複製輸入文字而無需修改的方法(包括不執行轉義,即使上下文[陣列、物件]否則需要這樣做也不新增分隔符)。 |
| 72 | abstract void writeRaw(String text) - 用於強制生成器逐字複製輸入文字而無需修改的方法(包括不執行轉義,即使上下文[陣列、物件]否則需要這樣做也不新增分隔符)。 |
| 73 | abstract void writeRaw(String text, int offset, int len) - 用於強制生成器逐字複製輸入文字而無需修改的方法(包括不執行轉義,即使上下文[陣列、物件]否則需要這樣做也不新增分隔符)。 |
| 74 | abstract void writeRawUTF8String(byte[] text, int offset, int length) - 與 writeString(String) 類似的方法,但其輸入是 UTF-8 編碼的字串,該字串將按原樣輸出,無需額外轉義(其型別取決於資料格式;JSON 的反斜槓)。 |
| 75 | abstract void writeRawValue(char[] text, int offset, int len) |
| 76 | 抽象 void writeRawValue(String text) - 強制生成器逐字複製輸入文字而不進行任何修改的方法,但假設它必須構成單個合法的 JSON 值(數字、字串、布林值、null、陣列或列表)。 |
| 77 | 抽象 void writeRawValue(String text, int offset, int len) |
| 78 | 抽象 void writeStartArray() - 用於寫入 JSON 陣列值起始標記的方法(字元 '[';如果啟用了漂亮列印,則可能加上空格裝飾)。 |
| 79 | 抽象 void writeStartObject() - 用於寫入 JSON 物件值起始標記的方法(字元 '{';如果啟用了漂亮列印,則可能加上空格裝飾)。 |
| 80 | 抽象 void writeString(char[] text, int offset, int len) - 用於輸出字串值的方法。 |
| 81 | 抽象 void writeString(SerializableString text) - 與 writeString(String) 類似的方法,但它接受 SerializableString,這可能使呼叫更高效,因為生成器可能能夠重用帶引號和/或編碼的表示形式。 |
| 82 | 抽象 void writeString(String text) - 用於輸出字串值的方法。 |
| 83 | void writeStringField(String fieldName, String value) - 用於輸出具有字串值的欄位條目(“成員”)的便捷方法。 |
| 84 | 抽象 void writeTree(TreeNode rootNode) - 使用此生成器寫入給定 JSON 樹(表示為以給定 JsonNode 為根的樹)的方法。 |
| 85 | void writeTypeId(Object id) - 可以呼叫以輸出所謂的原生型別 ID 的方法。 |
| 86 | 抽象 void writeUTF8String(byte[] text, int offset, int length) - 與 writeString(String) 類似的方法,但它以 UTF-8 編碼的字串作為輸入,該字串尚未使用資料格式所需的任何轉義方案進行轉義(對於 JSON,它是控制字元和雙引號的反斜槓轉義;對於其他格式,則是其他內容)。 |
繼承的方法
此類繼承自以下類的方法
java.lang.Object
JsonParser 類
簡介
JsonParser 是定義用於讀取 Json 內容的公共 API 的基類。例項是使用 JsonFactory 例項的工廠方法建立的。
類宣告
以下是com.fasterxml.jackson.core.JsonParser類的宣告
public abstract class JsonParser
extends Object
implements Closeable, Versioned
巢狀類
| 序號 | 類和描述 |
|---|---|
| 1 | static class JsonParser.Feature 列舉,定義解析器的所有可切換功能。 |
| 2 | static class JsonParser.NumberType 列舉,表示可用於數字的可能的“原生”(最佳)型別。 |
欄位
protected int _features - 由指示哪些 JsonParser.Features 已啟用的位組成的位標誌。
建構函式
| 序號 | 建構函式和描述 |
|---|---|
| 1 | protected JsonParser() 預設建構函式 |
| 2 | protected JsonParser(int features) |
類方法
| 序號 | 方法和描述 |
|---|---|
| 1 | protected JsonParseException _constructError(String msg) - 基於解析器的當前狀態構造 JsonParseExceptions 的輔助方法。 |
| 2 | protected void _reportUnsupportedOperation() - 解析器實現不支援的操作呼叫的輔助方法。 |
| 3 | boolean canReadObjectId() - 可以呼叫的內省方法,以檢視底層資料格式是否原生支援某種物件 ID(許多都不支援;例如,JSON 不支援)。 |
| 4 | boolean canReadTypeId() - 可以呼叫的內省方法,以檢視底層資料格式是否原生支援某種型別 ID(許多都不支援;例如,JSON 不支援)。 |
| 5 | boolean canUseSchema(FormatSchema schema) - 可用於驗證給定模式是否可與此解析器一起使用的方法(使用 setSchema(com.fasterxml.jackson.core.FormatSchema))。 |
| 6 | 抽象 void clearCurrentToken() - 用於“使用”當前標記的方法,透過有效地將其移除,以便 hasCurrentToken() 返回 false,而 getCurrentToken() 返回 null。 |
| 7 | 抽象 void close() - 關閉解析器,以便無法進行進一步的迭代或資料訪問;如果解析器擁有輸入源,或者啟用了功能 JsonParser.Feature.AUTO_CLOSE_SOURCE,則也會關閉底層輸入源。 |
| 8 | JsonParser configure(JsonParser.Feature f, boolean state) - 用於啟用或停用指定功能的方法(檢查 JsonParser.Feature 以獲取功能列表) |
| 9 | JsonParser disable(JsonParser.Feature f) - 用於停用指定功能的方法(檢查 JsonParser.Feature 以獲取功能列表) |
| 10 | JsonParser enable(JsonParser.Feature f) - 用於啟用指定解析器功能的方法(檢查 JsonParser.Feature 以獲取功能列表) |
| 11 | 抽象 BigInteger getBigIntegerValue() - 噹噹前標記的型別為 JsonToken.VALUE_NUMBER_INT 且由於其大小而無法用作 Java long 原語型別時,可以呼叫的數字訪問器。 |
| 12 | byte[] getBinaryValue() - getBinaryValue(Base64Variant) 的便捷替代方法,預設為使用 Base64Variants.getDefaultVariant() 作為預設編碼。 |
| 13 | 抽象 byte[] getBinaryValue(Base64Variant b64variant) - 可用於讀取(並使用 - 結果在呼叫後可能無法使用其他方法訪問)包含在當前文字 JSON 值中的 base64 編碼的二進位制資料的方法。 |
| 14 | boolean getBooleanValue() - 噹噹前標記為 JsonToken.VALUE_TRUE 或 JsonToken.VALUE_FALSE 時可以呼叫的便捷訪問器。 |
| 15 | byte getByteValue() - 噹噹前標記的型別為 JsonToken.VALUE_NUMBER_INT 且可以表示為 Java byte 原語型別的值時,可以呼叫的數字訪問器。 |
| 16 | 抽象 ObjectCodec getCodec() - 與此解析器關聯的物件編解碼器的訪問器(如果有)。 |
| 17 | 抽象 JsonLocation getCurrentLocation() - 返回最後處理的字元位置的方法;通常用於錯誤報告目的。 |
| 18 | 抽象 String getCurrentName() - 可用於獲取與當前標記關聯的名稱的方法:對於 JsonToken.FIELD_NAME,它將與 getText() 返回的內容相同;對於欄位值,它將是前面的欄位名稱;對於其他值(陣列值、根級值),則為 null。 |
| 19 | 抽象 JsonToken getCurrentToken() - 訪問解析器當前指向的標記(如果有)的訪問器;如果沒有,則返回 null。 |
| 20 | 抽象 int getCurrentTokenId() - 與 getCurrentToken() 類似的方法,但返回 int 而不是 JsonToken(列舉值)。 |
| 21 | 抽象 BigDecimal getDecimalValue() - 噹噹前標記的型別為 JsonToken.VALUE_NUMBER_FLOAT 或 JsonToken.VALUE_NUMBER_INT 時可以呼叫的數字訪問器。 |
| 22 | 抽象 double getDoubleValue() - 噹噹前標記的型別為 JsonToken.VALUE_NUMBER_FLOAT 且可以表示為 Java double 原語型別時可以呼叫的數字訪問器。 |
| 23 | 抽象 Object getEmbeddedObject() - 如果(且僅當)當前標記為 JsonToken.VALUE_EMBEDDED_OBJECT 時可以呼叫的訪問器。 |
| 24 | int getFeatureMask() - 獲取所有標準 JsonParser.Features 狀態的批次訪問方法。 |
| 25 | 抽象 float getFloatValue() - 噹噹前標記的型別為 JsonToken.VALUE_NUMBER_FLOAT 且可以表示為 Java float 原語型別時可以呼叫的數字訪問器。 |
| 26 | Object getInputSource() - 可用於獲取對用於訪問正在解析的輸入的物件的訪問權的方法;這通常是 InputStream 或 Reader,具體取決於解析器是如何構造的。 |
| 27 | 抽象 int getIntValue() - 噹噹前標記的型別為 JsonToken.VALUE_NUMBER_INT 且可以表示為 Java int 原語型別的值時可以呼叫的數字訪問器。 |
| 28 | 抽象 JsonToken getLastClearedToken() - 可用於獲取使用 clearCurrentToken() 清除的最後一個標記的方法。 |
| 29 | 抽象 long getLongValue() - 噹噹前標記的型別為 JsonToken.VALUE_NUMBER_INT 且可以表示為 Java long 原語型別的值時可以呼叫的數字訪問器。 |
| 30 | 抽象 JsonParser.NumberType getNumberType() - 如果當前標記的型別為 JsonToken.VALUE_NUMBER_INT 或 JsonToken.VALUE_NUMBER_FLOAT,則返回 JsonParser.NumberType 常量之一;否則返回 null。 |
| 31 | 抽象 Number getNumberValue() - 將適用於所有型別數字值的通用數字值訪問器方法。 |
| 32 | Object getObjectId() - 可用於檢查當前標記(剛剛讀取的標記)是否具有關聯的物件 ID,以及如果具有,則返回該 ID 的方法。 |
| 33 | 抽象 JsonStreamContext getParsingContext() - 可用於訪問讀取器所在的當前解析上下文的 方法。 |
| 34 | FormatSchema getSchema() - 用於訪問此解析器使用的模式(如果有)的方法。 |
| 35 | short getShortValue() - 噹噹前標記的型別為 JsonToken.VALUE_NUMBER_INT 且可以表示為 Java short 原語型別的值時可以呼叫的數字訪問器。 |
| 36 | 抽象 String getText() - 用於訪問當前標記的文字表示形式的方法;如果沒有當前標記(在第一次呼叫 nextToken() 之前,或在遇到輸入結束之後),則返回 null。 |
| 37 | 抽象 char[] getTextCharacters() - 與 getText() 類似的方法,但它將返回包含文字值的底層(不可修改的)字元陣列,而不是構造一個 String 物件來包含此資訊。 |
| 38 | 抽象 int getTextLength() - 與 getTextCharacters() 一起使用的訪問器,用於瞭解儲存在返回緩衝區中的字串的長度。 |
| 39 | 抽象 int getTextOffset() - 與 getTextCharacters() 一起使用的訪問器,用於瞭解緩衝區中第一個文字內容字元的偏移量。 |
| 40 | 抽象 JsonLocation getTokenLocation() - 返回當前標記的起始位置的方法;也就是說,從輸入開始當前標記的第一個字元的位置。 |
| 41 | Object getTypeId() - 可用於檢查當前標記(剛剛讀取的標記)是否具有關聯的型別 ID,以及如果具有,則返回該 ID 的方法。 |
| 42 | boolean getValueAsBoolean() - 將嘗試將當前標記的值轉換為布林值的方法。 |
| 43 | boolean getValueAsBoolean(boolean defaultValue) - 將嘗試將當前標記的值轉換為布林值的方法。 |
| 44 | double getValueAsDouble() - 將嘗試將當前標記的值轉換為 Java double 的方法。 |
| 45 | double getValueAsDouble(double defaultValue) - 將嘗試將當前標記的值轉換為 Java double 的方法。 |
| 46 | int getValueAsInt() - 將嘗試將當前標記的值轉換為 int 的方法。 |
| 47 | int getValueAsInt(int defaultValue) - 將嘗試將當前標記的值轉換為 int 的方法。 |
| 48 | long getValueAsLong() - 將嘗試將當前標記的值轉換為 long 的方法。 |
| 49 | long getValueAsLong(long defaultValue) - 將嘗試將當前標記的值轉換為 long 的方法。 |
| 50 | String getValueAsString() - 將嘗試將當前標記的值轉換為字串的方法。 |
| 51 | 抽象 String getValueAsString(String defaultValue) - 將嘗試將當前標記的值轉換為字串的方法。 |
| 52 | 抽象 boolean hasCurrentToken() - 用於檢查解析器當前是否指向標記(以及該標記的資料是否可用)的方法。 |
| 53 | 抽象 boolean hasTextCharacters() - 可用於確定呼叫 getTextCharacters() 是否是訪問解析器當前指向的事件的文字內容的最有效方法的方法。 |
| 54 | 抽象 boolean isClosed() - 可用於確定此解析器是否已關閉的方法。 |
| 55 | boolean isEnabled(JsonParser.Feature f) - 用於檢查是否啟用了指定的 JsonParser.Feature 的方法。 |
| 56 | boolean isExpectedStartArrayToken() - 可用於驗證當前標記是否指示開始陣列(通常表示當前標記為 JsonToken.START_ARRAY)的專用訪問器,當預期開始陣列時。 |
| 57 | Boolean nextBooleanValue() - 獲取下一個標記(就像呼叫 nextToken() 一樣)的方法,如果它是 JsonToken.VALUE_TRUE 或 JsonToken.VALUE_FALSE,則返回匹配的 Boolean 值;否則返回 null。 |
| 58 | boolean nextFieldName(SerializableString str) - 獲取下一個標記(如同呼叫 nextToken())並驗證其是否為 JsonToken.FIELD_NAME 且名稱與指定名稱相同,並返回比較結果。 |
| 59 | int nextIntValue(int defaultValue) - 獲取下一個標記(如同呼叫 nextToken()),如果它是 JsonToken.VALUE_NUMBER_INT 則返回 32 位整數值;否則返回指定的預設值。它在功能上等效於 |
| 60 | long nextLongValue(long defaultValue) - 獲取下一個標記(如同呼叫 nextToken()),如果它是 JsonToken.VALUE_NUMBER_INT 則返回 64 位長整數值;否則返回指定的預設值。它在功能上等效於 |
| 61 | String nextTextValue() - 獲取下一個標記(如同呼叫 nextToken()),如果它是 JsonToken.VALUE_STRING 則返回包含的字串值;否則返回 null。 |
| 62 | abstract JsonToken nextToken() - 主要迭代方法,它將推進流以確定下一個標記的型別(如果有)。 |
| 63 | abstract JsonToken nextValue() - 迭代方法,它將推進流以確定下一個標記的型別,該標記是值型別(包括 JSON 陣列和物件開始/結束標記)。 |
| 64 | abstract void overrideCurrentName(String name) - 可用於更改當前(欄位)名稱的方法。 |
| 65 | int readBinaryValue(Base64Variant b64variant, OutputStream out) - 類似於 readBinaryValue(OutputStream),但允許顯式指定要使用的 Base64 變體。 |
| 66 | int readBinaryValue(OutputStream out) - 可用作 getBigIntegerValue() 的替代方法,尤其是在值可能很大的情況下。 |
| 67 | <T> T readValueAs(Class<T> valueType) - 將 JSON 內容反序列化為非容器型別(它可以是陣列型別)的方法:通常是 bean、陣列或包裝型別(如 Boolean)。 |
| 68 | <T> T readValueAs(TypeReference<?> valueTypeRef)- 將 JSON 內容反序列化為 Java 型別的方法,該型別的引用作為引數傳遞。 |
| 69 | <T extends TreeNode> T readValueAsTree() - 將 JSON 內容反序列化為等效的“樹模型”的方法,由生成的模型的根 TreeNode 表示。 |
| 70 | <T> Iterator<T> readValuesAs(Class<T> valueType) - 用於從解析器流讀取物件序列的方法,所有物件都具有相同的指定值型別。 |
| 71 | <T> Iterator<T> readValuesAs(TypeReference<?> valueTypeRef)- 用於從解析器流讀取物件序列的方法,所有物件都具有相同的指定值型別。 |
| 72 | int releaseBuffered(OutputStream out) - 可呼叫以回退任何已讀取但未被解析器使用的內容的方法。 |
| 73 | int releaseBuffered(Writer w) - 可呼叫以回退任何已讀取但未被解析器使用的內容的方法。 |
| 74 | boolean requiresCustomCodec() - 可呼叫以確定是否需要自定義 ObjectCodec 來繫結使用此工廠構建的 JsonParser 解析的資料(這通常也意味著 JsonGenerator 的序列化也是如此)。 |
| 75 | abstract void setCodec(ObjectCodec c) - 設定器,允許定義與此解析器關聯的 ObjectCodec(如果有)。 |
| 76 | JsonParser setFeatureMask(int mask) - 所有標準 JsonParser.Features 狀態的(重新)設定的批次設定方法 |
| 77 | void setSchema(FormatSchema schema) - 呼叫以使此解析器使用指定的模式的方法。 |
| 78 | abstract JsonParser skipChildren() - 如果流指向 JsonToken.START_OBJECT 或 JsonToken.START_ARRAY,則此方法將跳過解析器當前指向的陣列或物件標記的所有子標記。 |
| 79 | abstract Version version() - 獲取核心包版本的訪問器,給定一個解析器例項。 |
繼承的方法
此類繼承自以下類的方法
java.lang.Object