解析大型 JSON 檔案時,考慮資料結構中潛在的不一致至關重要。通常,Web 服務會傳回不完全符合標準格式的 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中文網其他相關文章!