Go語言介面開發——不確定JSON資料結構的解析

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

在公司主要做介面的開發,會經常遇到介面對接的情況。有的時候,同一個請求返回的JSON資料格式並不一樣。如果是正常,則可能只返回一個status欄位,說明正常;如果中間出錯,除了在status欄位裡面說明錯誤類型,還會通過error_message附帶錯誤詳細資料。比如要給使用者加積分,如果加分失敗,還會附帶使用者id等資訊。那麼,請求一個介面可能的傳回值就是不確定的。

我最初就是定義兩個結構體,我處理的資料都共有一個欄位status,如果能夠解析並且status表示操作成功,那麼用封裝成功內容的結構體解析;否則,用封裝失敗的結構體解析。這就是傳說中的DIRTY HACK。。。

後來,偶然發現封裝正確的結構體也會解析錯誤的字串,當然,只會解析共有欄位。那麼,這個問題就好解決多了。把兩個結構體放到一起即可,如果沒有該欄位,就不會被解析放入值。也就是說,未被解析的變數放的是預設值。

package mainimport ("encoding/json""fmt")type Result struct {Status       int    `json:"status"`Message      string `json:"message"`ErrorCode    int    `json:"error_code"`ErrorMessage string `json:"error_message"`}func main() {json_str0 := `{"status":0,"message":"success"}`json_str1 := `{"status":1,"error_code":5,"error_message":"error"}`res0 := Result{}res1 := Result{}err0 := json.Unmarshal([]byte(json_str0), &res0)err1 := json.Unmarshal([]byte(json_str1), &res1)fmt.Println(res0, err0)fmt.Println(res1, err1)}

這麼簡單的東西,Go語言的基本文法,但是看書的時候沒有注意過,關鍵是做的時候沒有認真分析,就直接DIRTY HACK了,我都不能忍自己了。。。

最後,還有一點,Go支援未知JSON資料結構的解析。建立一個interface,把它的地址傳進去解析就行了,會解析出map[string]interface類型的資料。

參考文獻
  • 【1】Go語言編程

原文連結:Go語言介面開發——不確定JSON資料結構的解析,轉載請註明來源!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.