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

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

如何通過結構重新格式化 JSON?

如何通過結構重新格式化 JSON?

Go
慕無忌1623718 2023-04-04 14:07:53
我已經從給定的數據庫中提取了一些數據——但是格式不符合我的要求。示例結構:type myStruct struct {    ID                  int    `json:"Id"`    Language            string `json:"Language"`    Location            string `json:"Location"`}是的,我使用表示給定返回列的自定義結構序列化給定的字符串映射:func transformJSON(extract []map[string]*sql.SqlCell) ([]byte, error) {    return json.MarshalIndent(extract, "", " ")}這將返回有效的 JSON,但格式為:  {      {      "id": {       "Value": {        "Long": 12353       }      },      "language": {       "Value": {        "String_": "ja-JP"       }      },      "location": {       "Value": {        "String_": "Osaka"       }  },參考我上面的結構,我想要這樣的格式: [  {    "Id": 12353,    "Language": "ja-JP",    "Location": "Osaka"  },  // .. other objects ]假設對 的輸入相同func transformJSON,我將如何將嵌套鍵與列類型值匹配?我應該Marshal先繪制地圖,然后轉換數據——還是[]map[string]*sql.SqlCell在編組之前直接使用數據結構?在我的腦海里,我在想:func transformJSON(extract []map[string]*sql.SqlCell) ([]byte, error) {    struct :=[] myStruct{}    // Loop over extract objects, match nested keys, write to struct?    return json.MarshalIndent(struct, "", " ")}
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

創建一個自定義解組器,解組整個事情,然后為您轉換:


type MyStruct struct {

? ? ID? ? ? ? ? ? ? ? ? int? ? `json:"Id"`

? ? Language? ? ? ? ? ? string `json:"Language"`

? ? Location? ? ? ? ? ? string `json:"Location"`

}


type val struct {

? ? Value struct {

? ? ? ? String string `json:"String_"`

? ? ? ? Long? ?int? ? `json:"Long"`

? ? }

}


func (s *MyStruct) UnmarshalJSON(p []byte) error {

? ? var result struct{

? ? ? ? ID? ? ? ?val `json:"Id"`

? ? ? ? Language val `json:"language"`

? ? ? ? Location val `json:"location"`

? ? }

? ? if err := json.Unmarshal(p, &result); err != nil {

? ? ? ? return err

? ? }

? ? s.ID = result.ID.Value.Long

? ? s.Language = result.Langauge.Value.String

? ? s.Location= result.Location.Value.String

? ? return nil

}

請注意,在此示例中完成了最少的錯誤檢查和數據驗證


查看完整回答
反對 回復 2023-04-04
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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