簡體   English   中英

如何在JSON中只獲取大數組的第一個元素?

[英]How to get only the 1st element of an large array in JSON?

我一直在關注Gson Library的Streaming實現。 但是我無法確定像下面那樣獲取數組的第一個元素是否是一個好習慣。 URL返回包含Json數組的InputStream

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
reader.beginArray();
Message message = new gson().fromJson(reader, Message.class);
reader.endArray(); // this line
reader.close();

我的問題在於旁邊有評論的界限。 如果我只想獲得第一個元素,我應該這樣做嗎?

請注意,我想知道代碼的效率。 代碼直接從gson流示例中復制[通過一些修改來正確描述情況]。

實際的數組非常大。 這就是為什么我不能等待獲得整個數組然后獲得元素。 所以我想在獲得第一個元素然后關閉流后立即中斷該過程。

如果有的話,請向我推薦任何更好的方法。

請注意,我想知道代碼的效率

那么,看看代碼:) JsonReader的源代碼

它幾乎可以滿足您的期望。 它使用提供的InputStreamReader ,只讀取完成操作所需的內容(在您的情況下,從JSON數組中獲取第一個對象)。

但是...當你調用endArray() ......這是怎么回事,直到它找到收盤從流中讀取]數組中。 你實際上並不關心這一點,當然也不想花時間從線上讀取所有數據。 只需調用close()

因為你正在關閉JsonReader (以及基礎流)......這就像你將要獲得的一樣好。 您只能從基礎流中讀取所需數據,然后將其關閉。

從評論中編輯:您可以通過以下方式使您的案例變得干凈整潔:

public Message getFirstMessageFromArray(JsonReader reader) {
    reader.beginArray();
    return getMessageFromJson(reader);
}

public Message getMessageFromJson(JsonReader reader) {
    return new gson().fromJson(reader, Message.class);
}

當你想要使用它時:

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
Message message = getFirstMessageFromArray(reader);
reader.close();

要么

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
Message message = getMessageFromJson(reader);
reader.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM