」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Go JSON 解組中處理巢狀數組?

如何在 Go JSON 解組中處理巢狀數組?

發佈於2024-11-08
瀏覽:552

How to Handle Nested Arrays in Go JSON Unmarshalling?

Golang JSON:透過解組處理嵌套數組

在Go 中,解組後處理嵌套JSON 數組時,理解錯誤至關重要「類型介面{}不支援索引。」當您嘗試存取儲存在interface{}變數中的JSON陣列中的元素時,會發生此錯誤。

要解決此問題,您需要利用類型斷言將interface{}變數轉換為底層陣列類型。

Interface{} JSON 模組中的表示形式

JSON 模組將陣列表示為[]interface{} 切片,字典作為map[string]interface{}在解碼為interface{}變數時映射。

使用型別斷言存取巢狀元素

無需錯誤檢查,您可以導覽使用型別斷言的JSON 陣列如下:

objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])

但是,需要注意的是,如果類型不匹配,這些類型斷言可能會出現恐慌。為了避免這個問題,您可以使用兩次返回形式並檢查錯誤:

objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle error here
}

解碼為結構以改善存取

如果 JSON 資料遵循一致的格式,更有效的解決方案是將其解碼為結構化類型。例如,根據所提供的數據:

type Result struct {
    Query   string `json:"query"`
    Count   int    `json:"count"`
    Objects []struct {
        ItemId      string `json:"ITEM_ID"`
        ProdClassId string `json:"PROD_CLASS_ID"`
        Available   int    `json:"AVAILABLE"`
    } `json:"objects"`
}

透過解碼為該結構,您可以使用 result.Objects[0].ItemId 直接存取項目 ID。這種方法消除了對類型斷言的需要,並提供了一種用於存取巢狀元素的類型安全方法。

最新教學 更多>
  • 為什麼 `malloc()` 在 C++ 中會導致「無效轉換」錯誤?
    為什麼 `malloc()` 在 C++ 中會導致「無效轉換」錯誤?
    Malloc 分配問題:了解「無效轉換」錯誤提供的程式碼在嘗試使用malloc 分配記憶體時引入了一個常見問題( )。此錯誤源自於將 malloc() 的回傳值直接指派給 char 指標而沒有進行正確的轉換。 malloc() 函數在堆中保留一塊記憶體並傳回一個通用的 void 指標。但是,程式碼將...
    程式設計 發佈於2024-11-08
  • 如何在 Zend Framework 中確定客戶端的時區?
    如何在 Zend Framework 中確定客戶端的時區?
    客戶端時區確定確定客戶端時區對於時間敏感的應用程式至關重要。這個問題探討如何在 Zend Framework 中取得此資訊。 以秒偏移量形式檢索時區取得時區的首選方法是作為 UTC 的秒數。例如,俄羅斯莫斯科將返回 36060,而英國倫敦將返回 0。 建議的解決方案建議的解決方案涉及利用jQuery...
    程式設計 發佈於2024-11-08
  • 如何使用 React 建立通知功能
    如何使用 React 建立通知功能
    Hello everyone ?? In today's tutorial, we'll guide you through building a real-time notifications feature using SuperViz, a powerful platform for rea...
    程式設計 發佈於2024-11-08
  • 了解命令式程式設計和聲明式程式設計之間的區別
    了解命令式程式設計和聲明式程式設計之間的區別
    當我剛開始學習React時,我的老師說:「JavaScript是命令式編程,而React是聲明式編程。」然而,一開始這對我來說不太有意義。因此,我決定將其分解以更好地理解其中的差異。 將命令式和聲明式程式設計與披薩進行比較? 為了更容易理解,讓我們來比較一下這兩種烹飪方法。 ...
    程式設計 發佈於2024-11-08
  • 如何使用 JPA 和 Hibernate 以 UTC 格式儲存日期/時間和時間戳記?
    如何使用 JPA 和 Hibernate 以 UTC 格式儲存日期/時間和時間戳記?
    使用JPA 和Hibernate 以UTC 格式儲存日期/時間和時間戳在Java Persistence API (JPA) 和Hibernate 中,管理日期/時間不同時區的時間戳值可能是一個挑戰。為了確保 UTC(協調世界時)時間的一致儲存和檢索,正確配置框架至關重要。 考慮提供的附註解的 JP...
    程式設計 發佈於2024-11-08
  • java.lang.RuntimeException 和 java.lang.Exception 之間的主要區別是什麼?
    java.lang.RuntimeException 和 java.lang.Exception 之間的主要區別是什麼?
    揭示java.lang.RuntimeException 和java.lang.Exception 的獨特本質在Java 異常領域內,兩個經常遇到的異常類別出現:java.lang.RuntimeException 和java.lang.Exception。為了有效地理解異常處理的複雜性,剖析它們之...
    程式設計 發佈於2024-11-08
  • 為什麼嵌入框陰影在透明背景的圖片上消失?
    為什麼嵌入框陰影在透明背景的圖片上消失?
    了解圖像上的插入框陰影問題在網頁設計中,使用插入框陰影在元素內創建深度和尺寸是一種常見技術。然而,在處理包含圖像的容器時,事情並不總是那麼簡單。當嵌入框陰影似乎在嵌入影像上消失時,就會出現問題。 隱形陰影的情況考慮原始問題中提供的範例:body { background-color: #0000...
    程式設計 發佈於2024-11-08
  • 如何在 ReactJS 中維護懸停狀態:解決事件註冊問題
    如何在 ReactJS 中維護懸停狀態:解決事件註冊問題
    在ReactJS 中維護懸停狀態:解決事件註冊問題使用內聯樣式時,您會遇到ReactJS 中懸停和活動事件的問題,因為onMouseEnter 和onMouseLeave 方法被證明是不可靠的。 要解決此問題,請考慮使用下列事件處理程序之一:onMouseDownonMouseEnter onMou...
    程式設計 發佈於2024-11-08
  • 如何在 JavaScript 中準確檢查 Null 值和空字串?
    如何在 JavaScript 中準確檢查 Null 值和空字串?
    檢查 JavaScript 中的 Null 值在 JavaScript 中,確定值是否為 null 有時會令人困惑。為了提供更深入的理解,本文將深入研究在 JavaScript 情境中偵測空值的細節。 檢查空值提供的程式碼片段旨在檢查跨多個變數的null 值:if (pass == null || ...
    程式設計 發佈於2024-11-08
  • 在 Golang 中建立 Google Drive 下載器(第 1 部分)
    在 Golang 中建立 Google Drive 下載器(第 1 部分)
    介绍 在本教程中,我们将构建一个功能强大的下载器,允许从Google Drive和其他云提供商下载文件。借助 Golang 高效的并发模式,您将能够同时管理多个下载、流式传输大文件并实时跟踪进度。无论您是下载一些小文件还是处理大型数据集,该项目都将展示如何构建可扩展且强大的下载器,...
    程式設計 發佈於2024-11-08
  • PHP 4 快速部署
    PHP 4 快速部署
    Servbay 已成為高效配置開發環境的領先工具。在本指南中,我們將引導您完成快速、安全地部署 PHP 8.1 的過程,以展示 Servbay 對簡化部署的承諾。 先決條件 確保您的電腦上安裝了 Servbay。您可以從 Servbay 官方網站輕鬆下載。安裝過程人性化;只需按照安...
    程式設計 發佈於2024-11-08
  • 如何繞過驗證碼
    如何繞過驗證碼
    No matter how many times people wrote that the captcha has outlived itself long time ago and no longer works as effectively as its developers would ha...
    程式設計 發佈於2024-11-08
  • 使用 super 呼叫超類別建構函數
    使用 super 呼叫超類別建構函數
    子類別可以使用 super(parameter-list);. 形式來呼叫其超類別定義的建構函數 parameter-list 必須指定超類別建構子所需的參數。 子類別建構子中執行的第一條語句必須始終是 super(); (或 super(parameter-list); 如果需要傳遞參數). ...
    程式設計 發佈於2024-11-08
  • 你能比較 C++ 中不同容器的迭代器嗎?
    你能比較 C++ 中不同容器的迭代器嗎?
    比較來自不同容器的迭代器:一個警示故事在C 中,迭代器提供了一個強大的遍歷集合的機制。然而,在使用來自不同容器的迭代器時,重要的是要意識到這些限制。 比較不同容器的迭代器是否合法的問題經常出現。考慮以下範例:std::vector<int> foo; std::vector<int...
    程式設計 發佈於2024-11-08
  • 幫助 FastAPI:如何為文件翻譯做出貢獻
    幫助 FastAPI:如何為文件翻譯做出貢獻
    One of the great features of FastAPI is its great documentation ?. But wouldn't it be better if more people around the world had access to this docume...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3