首頁 > 後端開發 > C++ > 如何在.NET 中高效解析大型非標準 JSON 檔案?

如何在.NET 中高效解析大型非標準 JSON 檔案?

Susan Sarandon
發布: 2025-01-06 04:23:47
原創
429 人瀏覽過

How Can I Efficiently Parse Large, Non-Standard JSON Files in .NET?

在 .NET 中解析大型 JSON 檔案

處理較大大小的 JSON 檔案時,使用標準 JsonConvert.Deserialize 方法遇到挑戰並不少見。本文將透過深入研究 Json.NET 提供的獨特解決方案來解決這個問題。

記憶體問題

如原始問題所示,預設的反序列化方法在處理時可能會導致記憶體異常大型 JSON 檔案。這通常是由於反序列化過程的記憶體性質造成的,這對於海量資料集可能會出現問題。

無效的 JSON 格式

在問題中描述的特定場景中,額外的出現併發症。 JSON 檔案包含多個由無效語法分隔的陣列,使其不符合 JSON 標準。這種無效的格式為 Json.NET 的自動反序列化帶來了問題。

解決方案:JsonTextReader

為了克服這些挑戰,Json.NET 提供了專門的解決方案:JsonTextReader。透過直接使用 JsonTextReader 讀取 JSON 文件,我們可以將 SupportMultipleContent 標誌設為 true。此標誌允許讀者處理包含多個陣列的非標準 JSON 格式。

流式方法

我們採用串流方法,而不是嘗試一次反序列化整個檔案。使用循環,我們可以反序列化 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);
        }
    }
}
登入後複製

結論

透過使用設定了SupportMultipleContent 標誌的JsonTextReader ,我們即使面對非標準語法,也可以有效解析大型JSON 檔案。這種方法確保了記憶體效率和資料完整性。

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

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