如何在嵌套的映射中添加数据?

huangapple go评论114阅读模式
英文:

How to add data in a nested map?

问题

我有一个嵌套的映射数据,其中一个是列表,我想使用append方法向列表中添加数据,但是返回了一个错误:

invalid argument: baseData["a"].(map[string]interface{})["actions"] (map index expression of type interface{}) is not a slice

以下是你的代码:

  1. baseData := map[string]interface{}{}
  2. dateData := map[string]interface{}{
  3. "date": map[string]interface{}{
  4. "updatedAt": "yyyy-mm-dd",
  5. "isChanged": true,
  6. },
  7. "actions": []interface{}{},
  8. }
  9. baseData["a"] = dateData
  10. .....示例
  11. {
  12. "a": {
  13. "actions": [],
  14. "date": {
  15. "isChanged": true,
  16. "updatedAt": "yyyy-mm-dd"
  17. }
  18. },
  19. "b": {
  20. "actions": [],
  21. "date": {
  22. "isChanged": true,
  23. "updatedAt": "yyyy-mm-dd"
  24. }
  25. }
  26. }
  27. 我的代码
  28. actionData := map[string]interface{}{
  29. "id": data.Id,
  30. "action": data.Action,
  31. }
  32. baseData["a"].(map[string]interface{})["actions"] = append(baseData["a"].(map[string]interface{})["actions"], actionData)

希望这可以帮助到你!

英文:

I have a nested map data that
One of them is a list, and I want to add data to the list using the append method
but it return an error :

invalid argument: baseData["a"].(map[string]interface{})["actions"] (map index expression of type interface{}) is not a slice
  1. baseData := map[string]interface{}{}
  2. dateData := map[string]interface{}{
  3. "date": map[string]interface{}{
  4. "updatedAt": "yyyy-mm-dd",
  5. "isChanged": true,
  6. },
  7. "actions": []interface{}{},
  8. }
  9. baseData["a"] = dateData
  10. .....example
  11. {
  12. "a": {
  13. "actions": [],
  14. "date": {
  15. "isChanged": true,
  16. "updatedAt": "yyyy-mm-dd"
  17. }
  18. },
  19. "b": {
  20. "actions": [],
  21. "date": {
  22. "isChanged": true,
  23. "updatedAt": "yyyy-mm-dd"
  24. }
  25. }

}

My codes

  1. actionData := map[string]interface{}{
  2. "id": data.Id,
  3. "action": data.Action,
  4. }
  5. baseData["a"].(map[string]interface{})["actions"] = append(baseData["a"].(map[string]interface{})["actions"], actionData)

答案1

得分: 1

做这个:

  1. package main
  2. import "fmt"
  3. func main() {
  4. dateData := map[string]interface{}{
  5. "actions": []interface{}{},
  6. }
  7. dateData["actions"] = append(dateData["actions"].([]interface{}), "foobar")
  8. fmt.Printf("%+v\n", dateData)
  9. }

输出:

  1. map[actions:[foobar]]
英文:

Do this:

  1. package main
  2. import "fmt"
  3. func main() {
  4. dateData := map[string]interface{}{
  5. "actions": []interface{}{},
  6. }
  7. dateData["actions"] = append(dateData["actions"].([]interface{}), "foobar")
  8. fmt.Printf("%+v\n", dateData)
  9. }

Output:

  1. map[actions:[foobar]]

答案2

得分: 0

baseData := map[string]interface{}{}
dateData := map[string]interface{}{
"date": map[string]interface{}{
"updatedAt": "yyyy-mm-dd",
"isChanged": true,
},
"actions": []interface{}{},
}
baseData["a"] = dateData

actionData := map[string]interface{}{
"id": data.Id,
"action": data.Action,
}
baseData["a"].(map[string]interface{})["actions"] = append(baseData["a"].(map[string]interface{})["actions"].([]interface{}), actionData)

英文:
  1. baseData := map[string]interface{}{}
  2. dateData := map[string]interface{}{
  3. "date": map[string]interface{}{
  4. "updatedAt": "yyyy-mm-dd",
  5. "isChanged": true,
  6. },
  7. "actions": []interface{}{},
  8. }
  9. baseData["a"] = dateData
  10. actionData := map[string]interface{}{
  11. "id": data.Id,
  12. "action": data.Action,
  13. }
  14. baseData["a"].(map[string]interface{})["actions"] = append(baseData["a"].(map[string]interface{})["actions"].([]interface{}), actionData)

huangapple
  • 本文由 发表于 2021年8月15日 14:33:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/68789235.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定