現在我們有一個JSON HTTP請求數據,它將是一個單一元素,如 {"data": {"id":1}}
或者像{"data": [{"id":1}, {"id":2}]}
這樣的元素數組。在Go中處理「單個元素或數組」的JSON屬性的最佳方式是什麼?
由於客戶端無法更改實現,我們必須保留並接受這個數據結構。
目前我實現結構喜歡:
type Request struct {
rawData json.RawMessage `json:"data"`
Data *Data `json:"-"`
DataList []*Data `json:"-"`
}
與第一解析「數據」財產json.RawMessage成可變req
,首先嚐試解析爲一個單一的元素,那麼如果失敗嘗試解析爲一個數組。
if err := json.Unmarshal(req.rawData, &req.Data); err != nil {
if err := json.Unmarshal(req.RawData, &req.DataList); err != nil {
return errors.New("could not parse data")
} else if len(req.DataList) < 1 {
return errors.New("empty list")
}
}
在這種情況下,以後當我們想用這些數據,我們可以檢查是否rawData
是單個元件或通過len(req.Datalist) >= 1
陣列。 (或者我可以在解析時設置一些標誌來顯示結構中的isDataMultiple
)。
除了我在做什麼之外,還有什麼地方方法可以達到同樣的效果嗎?
我個人只想讓值的數組。你可以有一個長度數組。 – squiguy
你的例子試圖解組一個單例,然後嘗試將它作爲一個數組來做,如果它失敗的話,這是在Go中處理這個問題的最習慣的方式。 – evanmcdonnal
[one]可能的重複(http://stackoverflow.com/questions/32346117/unmarshalling-a-json-that-may-or-may-not-return-an-array),[two](http:/ /stackoverflow.com/questions/37152092/what-is-a-good-way-to-handle-single-or-array-struct-in-golang-json-unmarshal),[three](http:// stackoverflow。 com/questions/33622016/json-sometimes-array-sometimes-object),[four](http://stackoverflow.com/questions/33569210/go-json-unmarshal-options)。 – icza