亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中將對象轉換為對象數組 (JSON)

在 Go 中將對象轉換為對象數組 (JSON)

Go
胡子哥哥 2022-11-28 14:39:15
我正在將 JS API 轉換為 Go。我使用來自第三方的數據,其中有時屬性是各種鍵、值的對象而不是對象數組(鍵、值)。所以在我的前端,如果它是一個對象,它不會渲染,所以我將它轉換成一個對象數組。目前在 JS 我正在這樣做:if (!Array.isArray(data.attributes)) {      // convert into array of objects; only works for non separate key:key value:value      data.attributes = Object.entries(data.attributes).map(        ([key, value]) => ({          type: key,          value: value,        })      );    }data是 JSON 響應中的一個屬性,例如: {... data: { "attributes": [{...}{...}]}所以偶爾屬性會是{... data: { "attributes": {name: "John", age: "20" }:我將如何在 Go 中做這樣的事情?謝謝。
查看完整描述

1 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

使用聲明的類型,您可以實現json.Unmarshaler接口以自定義 JSON 的解組方式。


{在實現中,您可以通過簡單地查看第一個和最后一個字節來查看它是-and-}還是[-and-來檢查 JSON 數據是否表示對象或數組]。根據該檢查,您可以決定如何進一步進行,下面是一個示例:


type Attr struct {

    Type  string

    Value interface{}

}


type AttrList []Attr


func (ls *AttrList) UnmarshalJSON(data []byte) error {

    if len(data) == 0 { // nothing to do

        return nil

    }


    switch last := len(data)-1; {

    // is array?

    case data[0] == '[' && data[last] == ']':

        return json.Unmarshal(data, (*[]Attr)(ls))


    // is object?

    case data[0] == '{' && data[last] == '}':

        var obj map[string]interface{}

        if err := json.Unmarshal(data, &obj); err != nil {

            return err

        }

        for key, value := range obj {

            *ls = append(*ls, Attr{Type: key, Value: value})

        }

        return nil

    }


    return errors.New("unsupported JSON type for AttrList")

}

https://go.dev/play/p/X5LV8G87bLJ


查看完整回答
反對 回復 2022-11-28
  • 1 回答
  • 0 關注
  • 355 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號