解析巢狀 JSON:扁平化簡單指南
破解嵌套 JSON 結構可能是一項艱鉅的任務。在本文中,我們深入研究將這些複雜的資料層次結構扁平化為可管理的單級格式的領域。
為了說明這個問題,讓我們考慮以下 Go 程式碼:
<code class="go">type Social struct { GooglePlusPlusOnes uint32 `json:"GooglePlusOne"` TwitterTweets uint32 `json:"Twitter"` LinkedinShares uint32 `json:"LinkedIn"` PinterestPins uint32 `json:"Pinterest"` StumbleuponStumbles uint32 `json:"StumbleUpon"` DeliciousBookmarks uint32 `json:"Delicious"` Facebook Facebook } type Facebook struct { FacebookLikes uint32 `json:"like_count"` FacebookShares uint32 `json:"share_count"` FacebookComments uint32 `json:"comment_count"` FacebookTotal uint32 `json:"total_count"` }</code>
此程式碼定義了兩個結構體:Social 和 Facebook,表示具有兩層巢狀的 JSON 資料。挑戰在於將此結構扁平化為單一級別,其中 Social 包含所有數據,而無需嵌套 Facebook 類型。
UnmarshalJSON 的力量
實現這種扁平化,UnmarshalJSON 函數開始發揮作用。透過為 Social 類型定義自訂 UnmarshalJSON 方法,我們可以控制如何從傳入的 JSON 中填入其欄位。
以下是我們實現此方法的方法:
<code class="go">func (s *Social) UnmarshalJSON(data []byte) error { type Alias Social var v Alias if err := json.Unmarshal(data, &v); err != nil { return err } *s = Social(v) // Flatten the Facebook fields s.FacebookLikes = v.Facebook.FacebookLikes s.FacebookShares = v.Facebook.FacebookShares s.FacebookComments = v.Facebook.FacebookComments s.FacebookTotal = v.Facebook.FacebookTotal return nil }</code>
地圖的力量
如果您純粹處理地圖,下面的Flatten 函數可以有效地展平巢狀的地圖結構:
<code class="go">func Flatten(m map[string]interface{}) map[string]interface{} { o := make(map[string]interface{}) for k, v := range m { switch child := v.(type) { case map[string]interface{}: nm := Flatten(child) for nk, nv := range nm { o[k+"."+nk] = nv } default: o[k] = v } } return o }</code>
此函數遞歸地展平映射,以點分隔鍵取代巢狀映射。
結論
展平巢狀 JSON 是各種程式設計場景中的常見任務。透過利用 UnmarshalJSON 和 Flatten 函數的強大功能,您可以有效簡化複雜 JSON 結構的處理和處理。這些技術使您能夠以更直接、更有效率的方式提取和存取資料。
以上是如何在 Go 中有效地將巢狀 JSON 結構扁平化為單層格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文解釋了GO的軟件包導入機制:命名imports(例如導入“ fmt”)和空白導入(例如導入_ fmt; fmt;)。 命名導入使包裝內容可訪問,而空白導入僅執行t

本文解釋了Beego的NewFlash()函數,用於Web應用程序中的頁間數據傳輸。 它專注於使用newflash()在控制器之間顯示臨時消息(成功,錯誤,警告),並利用會話機制。 Lima

本文詳細介紹了MySQL查詢結果的有效轉換為GO結構切片。 它強調使用數據庫/SQL的掃描方法來最佳性能,避免手動解析。 使用DB標籤和Robus的結構現場映射的最佳實踐

本文演示了創建模擬和存根進行單元測試。 它強調使用接口,提供模擬實現的示例,並討論最佳實踐,例如保持模擬集中並使用斷言庫。 文章

本文探討了GO的仿製藥自定義類型約束。 它詳細介紹了界面如何定義通用功能的最低類型要求,從而改善了類型的安全性和代碼可重複使用性。 本文還討論了局限性和最佳實踐

本文詳細介紹了在GO中詳細介紹有效的文件,將OS.WriteFile(適用於小文件)與OS.openfile和緩衝寫入(最佳大型文件)進行比較。 它強調了使用延遲並檢查特定錯誤的可靠錯誤處理。

本文使用跟踪工具探討了GO應用程序執行流。 它討論了手冊和自動儀器技術,比較諸如Jaeger,Zipkin和Opentelemetry之類的工具,並突出顯示有效的數據可視化


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)