<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Gson - `JsonReader` > 原文: [https://howtodoinjava.com/gson/jsonreader-streaming-json-parser/](https://howtodoinjava.com/gson/jsonreader-streaming-json-parser/) 了解如何使用 Gson `JsonReader`類,該類是基于請求的流式 JSON 解析器。 它有助于將 JSON 作為令牌流讀取。 ## 1\. `JsonReader` * `JsonReader`是流 JSON 解析器,并且是**拉式解析器**的示例。 推送解析器解析 JSON 令牌并將其推送到事件處理器中。 * 它有助于讀取 JSON([RFC 7159](https://www.ietf.org/rfc/rfc7159.txt))編碼的值作為令牌流。 * 它讀取字面值(字符串,數字,布爾值和`null`)以及對象和數組的開始和結束定界符。 * 令牌以**深度優先順序**遍歷,與 JSON 文檔中出現的順序相同。 > 閱讀更多: [XML](https://howtodoinjava.com/xml/sax-parser-read-xml-example/) 的流解析器 ## 2.令牌 在流模式下,每個 JSON 數據都被視為一個單獨的令牌。 當我們使用`JsonReader`處理它時,每個令牌將被順序處理。 例如, ```java { "name":"Lokesh" } ``` 在使用`JsonReader`進行解析時,上述 JSON 將生成 4 個令牌: * 令牌 1 = `{` * 令牌 2 = `name` * 令牌 3 = `Lokesh` * 令牌 4 = `}` ## 3.如何創建 GSON `JsonReader` 我們可以使用它的簡單構造器創建一個`JsonReader`實例,該實例接受[`java.io.Reader`](https://docs.oracle.com/javase/10/docs/api/java/io/Reader.html)類型的輸入流。 ```java String json = "{}"; JsonReader jsonReader = new JsonReader( new StringReader(json) ); ``` 我們可以根據 JSON 流的來源使用以下閱讀器之一: * `BufferedReader` * `LineNumberReader` * `CharArrayReader` * `InputStreamReader` * `FileReader` * `FilterReader` * `PushbackReader` * `PipedReader` * `StringReader` ## 4.讀取 JSON 流 在創建包裝了有效 JSON 源的`JsonReader`之后,我們可以開始對流令牌進行迭代并查看令牌值。 以下是在令牌上使用`JsonReader`讀取簡單 JSON 的示例。 ```java import java.io.IOException; import java.io.StringReader; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; public class Main { public static void main(String[] args) throws Exception { String json = "{'id': 1001,'firstName': 'Lokesh','lastName': 'Gupta','email': null}"; JsonReader jsonReader = new JsonReader(new StringReader(json)); jsonReader.setLenient(true); try { while (jsonReader.hasNext()) { JsonToken nextToken = jsonReader.peek(); if (JsonToken.BEGIN_OBJECT.equals(nextToken)) { jsonReader.beginObject(); } else if (JsonToken.NAME.equals(nextToken)) { String name = jsonReader.nextName(); System.out.println("Token KEY >>>> " + name); } else if (JsonToken.STRING.equals(nextToken)) { String value = jsonReader.nextString(); System.out.println("Token Value >>>> " + value); } else if (JsonToken.NUMBER.equals(nextToken)) { long value = jsonReader.nextLong(); System.out.println("Token Value >>>> " + value); } else if (JsonToken.NULL.equals(nextToken)) { jsonReader.nextNull(); System.out.println("Token Value >>>> null"); } else if (JsonToken.END_OBJECT.equals(nextToken)) { jsonReader.endObject(); } } } catch (IOException e) { e.printStackTrace(); } finally { jsonReader.close(); } } } ``` ```java Token KEY >>>> id Token Value >>>> 1001 Token KEY >>>> firstName Token Value >>>> Lokesh Token KEY >>>> lastName Token Value >>>> Gupta Token KEY >>>> email Token Value >>>> null ``` 在上面的示例中: * `JsonReader`的`hasNext()`方法如果有更多令牌,則返回`true`。 * `peek()`方法返回下一個 JSON 令牌,但不移至下一個。 * 隨后,多次調用`peek()`將返回相同的 JSON 令牌。 * 可以使用`JsonToken`類的常量檢查返回令牌的類型。 * 使用`beginArray()`和`endArray()`方法檢查數組的左括號`'['`和`']'`。 * 使用`beginObject()`和`endObject()`方法檢查對象的左括號`'{'`和`'}'`。 令牌的密鑰的類型為`JsonToken.NAME`。 使用`nextName()`方法獲取密鑰名稱。 * 確定令牌類型后,使用`nextLong()`,`nextString()`和`nextInt()`等方法獲取令牌的值。 * 可以使用`nextNull()`或`skipValue()`使用空字面值。 * 所有`next....()`方法都返回當前令牌的值,并將內部指針移到下一個。 * 當遇到未知名稱時,嚴格的解析器應該失敗,并帶有異常。 寬松解析器應調用`skipValue()`來遞歸地跳過該值的嵌套令牌,否則可能會發生沖突。 將有關 Gson `JsonReader`的問題交給我。 學習愉快! 參考: [Gson 用戶指南](https://github.com/google/gson) [`JsonReader` Java 文檔](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/stream/JsonReader.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看