首頁 > 後端開發 > C++ > 如何高效解析具有多個數組的大型非標準 JSON 檔案?

如何高效解析具有多個數組的大型非標準 JSON 檔案?

Susan Sarandon
發布: 2025-01-06 00:58:37
原創
499 人瀏覽過

How Can I Parse Large, Non-Standard JSON Files with Multiple Arrays Efficiently?

處理不完整的 JSON

解析大型 JSON 檔案時,考慮資料結構中潛在的不一致至關重要。通常,Web 服務會傳回不完全符合標準格式的 JSON 回應。一個常見問題是單一 JSON 檔案中存在多個數組結構。

問題:非標準 JSON 結構

在您的特定場景中,您遇到了以下問題:JSON 資料包含單個數組由右括號和左括號分隔的數組。這種不規則的格式使得無法使用 JsonConvert.DeserializeObject 等傳統方法將整個 JSON 反序列化為單一陣列。

解決方案:支援多內容的基於流的解析

應對這一挑戰,您可以利用 Json.NET 中基於流的解析的靈活性。透過建立 JsonTextReader 並將其 SupportMultipleContent 屬性設為 true,您可以讓閱讀器將 JSON 視為多個不同的內容區塊。

以下是示範此方法的修改後的程式碼片段:

using (WebClient client = new WebClient())
using (Stream stream = client.OpenRead(stringUrl))
using (StreamReader streamReader = new StreamReader(stream))
using (JsonTextReader reader = new JsonTextReader(streamReader))
{
    reader.SupportMultipleContent = true;

    var serializer = new JsonSerializer();
    while (reader.Read())
    {
        if (reader.TokenType == JsonToken.StartObject)
        {
            Contact c = serializer.Deserialize<Contact>(reader);
            Console.WriteLine(c.FirstName + " " + c.LastName);
        }
    }
}
登入後複製

此方法逐流讀取JSON內容,將每個物件解析為單獨的實體。當它遇到左大括號時,它會將單一聯絡人物件反序列化到您的 Contact 容器類別中並列印聯絡人資訊。

這種方法的優點是它增量處理 JSON 數據,而不嘗試解析一次完整的文件。這對於超出可用記憶體容量的大型 JSON 檔案特別有利。

透過利用基於流的解析並支援多種內容,您可以有效地處理不規則的 JSON 結構並高效地解析數據,無論其大小如何或複雜性。

以上是如何高效解析具有多個數組的大型非標準 JSON 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板