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

合并结构切片

合并结构切片

Go
牧羊人nacy 2022-06-21 16:15:27
我正在尝试将两个不同的 json 结构数组合并到一个 json blob 中(来自单独的分页请求)。但是,我无法将它们合并在一起:package mainimport (  "encoding/json"  "log")func main() {  superset := `[{"id": 1231, "name": "testing1"},{"id": 1235, "name": "testing2"}]`  subset   := `[{"id": 1237, "name": "testing3"}]`  s, _ := json.Marshal(superset)  log.Printf(string(s))  u, _ := json.Marshal(subset)  log.Printf(string(u))   for i := range s {     u = append(u, s[i])   }   log.Printf(string(u))}然而,这给了我真的只是他们的串联:"[{\"id\": 1237, \"name\": \"testing3\"}]""[{\"id\": 1231, \"name\": \"testing1\"},{\"id\": 1235, \"name\": \"testing2\"}]"我希望输出看起来像:[{"id": 1237, "name": "testing3"},{"id": 1231, "name": "testing1"},{"id": 1235, "name": "testing2"}]我觉得我错过了一些愚蠢的东西。任何帮助将不胜感激。谢谢!
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

json.Marshal()将给定的值编组为 JSON(并将其作为 a 返回[]byte),因此您拥有的内容s是u保存输入 JSON 文本的 JSON 文本。附加(连接)这两个文本甚至不会产生有效的 JSON,显然不是你想要的。


您的输入是 JSON 文本,包含一个 JSON 数组。因此,您应该做的是将您的输入解组为 Go 切片(类型为[]interface{}),您可以附加这些切片,然后将结果编组回 JSON。


像这样的东西:


superset := `[{"id": 1231, "name": "testing1"},{"id": 1235, "name": "testing2"}]`

subset := `[{"id": 1237, "name": "testing3"}]`


var s1, s2 []interface{}


if err := json.Unmarshal([]byte(superset), &s1); err != nil {

    panic(err)

}

if err := json.Unmarshal([]byte(subset), &s2); err != nil {

    panic(err)

}


s2 = append(s2, s1...)


result, err := json.Marshal(s2)

if err != nil {

    panic(err)

}

fmt.Println(string(result))

这个输出(在Go Playground上试试):


[{"id":1237,"name":"testing3"},{"id":1231,"name":"testing1"},{"id":1235,"name":"testing2"}]


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

添加回答

举报

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