gpt4 book ai didi

json - 在使用 Gorilla 的 Go ReST 服务中操作 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:03 25 4
gpt4 key购买 nike

我有一个接收 JSON 的 Go ReST 服务,我需要编辑 JSON 以便制作两个不同的结构。

我的结构:

type Interaction struct{

DrugName string `json:"drugName"`
SeverityLevel string `json:"severityLevel"`
Summary string `json:"summary"`
}

type Drug struct {
Name string `json:"drugName"`
Dosages []string `json:"dosages"`
Interactions []Interaction `json:"interactions"`
}

发送的 JSON 示例:

{"drugName":"foo","dosages":["dos1"],"interactions":[["advil","high","summaryForAdvil"]]}

ReST 服务:

func CreateDrug(w http.ResponseWriter, r *http.Request) {

//I verified the received JSON by printing out the bytes:
bytes, _ := ioutil.ReadAll(r.Body)
}

我的目标是在 CreateDrug 函数中制作两个不同的 JSON,这样我就可以制作两个不同的结构,Drug 和 Interaction:

{"drugName":"foo","dosages":["dos1"]}
{"drugName":"advil", "severityLevel":"high", "summary":"summaryForAdvil"}

在Go中,在这个函数中,如何使用接收到的JSON来制作两个新的JSON?

最佳答案

将请求解码为与请求结构匹配的结构,将值复制到您已定义的结构,然后编码以创建结果。

func CreateDrug(w http.ResponseWriter, r *http.Request) {

// Unmarshal request to value matching the structure of the incoming JSON

var v struct {
DrugName string
Dosages []string
Interactions [][3]string
}
if err := json.NewDecoder(r.Body).Decode(&v); err != nil {
// handle error
}

// Copy to new struct values.

var interactions []Interaction
for _, i := range v.Interactions {
interactions = append(interactions, Interaction{DrugName: i[0], SeverityLevel: i[1], Summary: i[2]})
}

drug := &Drug{Name: v.DrugName, Dosages: v.Dosages, Interactions: interactions}

// Marshal back to JSON.

data, err := json.Marshal(drug)
if err != nil {
// handle error
}

// Do something with data.
}

Playground link

(我假设您想要 Drug 的单个 JSON 值并填充了 Interactions 字段。如果这不是您想要的,请分别编码 Drug 和 Interactions 值。)

关于json - 在使用 Gorilla 的 Go ReST 服务中操作 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26133129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com