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

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

合并結構切片

合并結構切片

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 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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