为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用特定字段作为键将结构转换为映射?

如何使用特定字段作为键将结构转换为映射?

Go
翻过高山走不出你 2022-07-18 17:15:02
我正在尝试转换此结构type news struct {    Id       string `json:"id"`    Title    string `json:"title"`    Author   string `json:"author"`    Date     string `json:"date"`    Escraped string `json:"escraped"`    Page     string `json:"page"`    Body     string `json:"body"`    Url      string `json:"url"`}对于以 Id 为键的地图,今天当我对这个结构进行编码时,我在函数中返回了以下 json[  {    "id": "someId",    "title": "something",    "author": "something",    "date": "something",    "escraped": "something",    "page": "https://something",    "body": "something",    "url": "https://something"  }]但是现在我想更改它并使用 id 作为键,所以我想返回[  {    "someId": {      "title": "something",      "author": "something",      "date": "something",      "escraped": "something",      "page": "https://something",      "body": "something",      "url": "https://something"    }  }]我不太确定如何更改它以开始使用 ID 作为键而不是常规字段,我尝试创建另一个地图但失败了。
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

我在这里做一些假设:

  • 您正在news其他地方使用该结构,并且字段必须保持原样

  • 您尝试编码的数据是从切片中读取的[]news

您可以通过 3 个步骤完成此操作:

  1. 使该Id字段可选使用omitempty

  2. 使用定义和分配类型的map[string]news映射make()

  3. 迭代您的数据以填充map

更新结构

type news struct {

    Id       string `json:"id,omitempty"`

    Title    string `json:"title"`

    Author   string `json:"author"`

    Date     string `json:"date"`

    Escraped string `json:"escraped"`

    Page     string `json:"page"`

    Body     string `json:"body"`

    Url      string `json:"url"`

}

创建地图

result := make(map[string]news)

填充地图

// Transform a slice of news (called data) to a map (called result)

for _, entry := range data {

  result[entry.Id] = news{

     Title: entry.Title,

     Author: entry.Author,

     Date: entry.Date,

     Escraped: entry.Escraped,

     Page: entry.Page,

     Body: entry.Body,

     Url: entry.Url,

  }

}

// Encode the map

encoded, _ := json.Marshal(result)

输出:


{"someId":{"title":"something","author":"something","date":"something","escraped":"something","page":"https://something","body":"something","url":"https://something"}}

请参阅此处的示例:https: //play.golang.org/p/8z6M8HqCVgv


查看完整回答
反对 回复 2022-07-18
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信