Parsing json and creating map data type in golang

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

Parsing json and creating map data type in golang

问题

大家好,我有一个如下所示的Json结构:

  1. Json结构:
  2. {
  3. "items": [
  4. {"pkg": "0", "pin": "0", "item": "0"},
  5. {"pkg": "1", "pin": "1", "item": "1"},
  6. {"pkg": "0", "pin": "2", "item": "2"},
  7. {"pkg": "1", "pin": "3", "item": "3"},
  8. {"pkg": "0", "pin": "4", "item": "4"},
  9. {"pkg": "1", "pin": "5", "item": "5"},
  10. {"pkg": "0", "pin": "6", "item": "6"},
  11. {"pkg": "1", "pin": "7", "item": "7"},
  12. {"pkg": "0", "pin": "8", "item": "8"},
  13. {"pkg": "1", "pin": "9", "item": "9"},
  14. {"pkg": "0", "pin": "10", "item": "10"},
  15. {"pkg": "1", "pin": "11", "item": "11"},
  16. {"pkg": "0", "pin": "12", "item": "12"},
  17. {"pkg": "1", "pin": "13", "item": "13"},
  18. {"pkg": "0", "pin": "14", "item": "14"},
  19. {"pkg": "1", "pin": "15", "item": "15"},
  20. {"pkg": "0", "pin": "16", "item": "16"},
  21. {"pkg": "1", "pin": "17", "item": "17"},
  22. {"pkg": "0", "pin": "18", "item": "18"},
  23. {"pkg": "1", "pin": "19", "item": "19"},
  24. {"pkg": "0", "pin": "20", "item": "20"},
  25. {"pkg": "1", "pin": "21", "item": "21"},
  26. {"pkg": "0", "pin": "22", "item": "22"},
  27. {"pkg": "1", "pin": "23", "item": "23"},
  28. {"pkg": "0", "pin": "24", "item": "24"},
  29. {"pkg": "1", "pin": "25", "item": "25"},
  30. {"pkg": "0", "pin": "26", "item": "26"},
  31. {"pkg": "1", "pin": "27", "item": "27"},
  32. {"pkg": "0", "pin": "28", "item": "28"},
  33. {"pkg": "1", "pin": "29", "item": "29"},
  34. {"pkg": "0", "pin": "30", "item": "30"},
  35. {"pkg": "1", "pin": "31", "item": "31"},
  36. {"pkg": "0", "pin": "0", "item": "32"},
  37. {"pkg": "1", "pin": "1", "item": "33"},
  38. {"pkg": "0", "pin": "2", "item": "34"},
  39. {"pkg": "1", "pin": "3", "item": "35"},
  40. {"pkg": "0", "pin": "4", "item": "36"},
  41. {"pkg": "1", "pin": "5", "item": "37"},
  42. {"pkg": "0", "pin": "6", "item": "38"},
  43. {"pkg": "1", "pin": "7", "item": "39"},
  44. {"pkg": "0", "pin": "8", "item": "40"},
  45. {"pkg": "1", "pin": "9", "item": "41"}
  46. ]
  47. }

我使用以下结构来存储json中的值:

  1. package basics
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. "strconv"
  8. )
  9. type NNodes struct {
  10. Items []NodeItem `json:"items"`
  11. }
  12. type NodeItem struct {
  13. Pkg string `json:"pkg"`
  14. Pin string `json:"pin"`
  15. Item string `json:"item"`
  16. }
  17. func parser() {
  18. data, _ := ioutil.ReadFile("list.json")
  19. var result NNodes
  20. var pkg, pin, item int
  21. json.Unmarshal(data, &result)
  22. foobar := make(map[int]map[int][]int)
  23. siblings := make(map[int][]int)
  24. for _, value := range result.Items {
  25. if pkg, err = strconv.Atoi(value.Pkg); err != nil {
  26. break
  27. }
  28. if pin, err = strconv.Atoi(value.Pin); err != nil {
  29. break
  30. }
  31. if item, err = strconv.Atoi(value.Item); err != nil {
  32. break
  33. }
  34. siblings[pin] = append(siblings[pin], item)
  35. foobar[pkg] = siblings
  36. }
  37. fmt.Println(foobar)
  38. }

我得到的输出如下:

  1. map[0:map[0:[0 32] 1:[1 33] 2:[2 34] 3:[3 35] 4:[4 36] 5:[5 37] 6:[6 38] 7:[7 39] 8:[8 40] 9:[9 41] 10:[10 42] 11:[11 43] 12:[12 44] 13:[13 45] 14:[14 46] ..以此类推

我希望得到如下所示的具有唯一pkg的映射:

  1. // foobar映射的预期输出..基本上有2个相似的pin条目,它们对应的item应该添加到同一个切片中。
  2. map[0:map[0:[0,32] 2:[2,34] 4[4:36] 6[6:38]...
  3. map[1:map[1:[1,33] 3:[3,35] 5[5:37] 7[7:39]...

对于我出错的地方有什么提示吗?

英文:

Hi all I have a Json structure as below:

  1. Json Structure:
  2. {
  3. "items": [
  4. {"pkg": "0", "pin": "0", "item": "0"},
  5. {"pkg": "1", "pin": "1", "item": "1"},
  6. {"pkg": "0", "pin": "2", "item": "2"},
  7. {"pkg": "1", "pin": "3", "item": "3"},
  8. {"pkg": "0", "pin": "4", "item": "4"},
  9. {"pkg": "1", "pin": "5", "item": "5"},
  10. {"pkg": "0", "pin": "6", "item": "6"},
  11. {"pkg": "1", "pin": "7", "item": "7"},
  12. {"pkg": "0", "pin": "8", "item": "8"},
  13. {"pkg": "1", "pin": "9", "item": "9"},
  14. {"pkg": "0", "pin": "10", "item": "10"},
  15. {"pkg": "1", "pin": "11", "item": "11"},
  16. {"pkg": "0", "pin": "12", "item": "12"},
  17. {"pkg": "1", "pin": "13", "item": "13"},
  18. {"pkg": "0", "pin": "14", "item": "14"},
  19. {"pkg": "1", "pin": "15", "item": "15"},
  20. {"pkg": "0", "pin": "16", "item": "16"},
  21. {"pkg": "1", "pin": "17", "item": "17"},
  22. {"pkg": "0", "pin": "18", "item": "18"},
  23. {"pkg": "1", "pin": "19", "item": "19"},
  24. {"pkg": "0", "pin": "20", "item": "20"},
  25. {"pkg": "1", "pin": "21", "item": "21"},
  26. {"pkg": "0", "pin": "22", "item": "22"},
  27. {"pkg": "1", "pin": "23", "item": "23"},
  28. {"pkg": "0", "pin": "24", "item": "24"},
  29. {"pkg": "1", "pin": "25", "item": "25"},
  30. {"pkg": "0", "pin": "26", "item": "26"},
  31. {"pkg": "1", "pin": "27", "item": "27"},
  32. {"pkg": "0", "pin": "28", "item": "28"},
  33. {"pkg": "1", "pin": "29", "item": "29"},
  34. {"pkg": "0", "pin": "30", "item": "30"},
  35. {"pkg": "1", "pin": "31", "item": "31"},
  36. {"pkg": "0", "pin": "0", "item": "32"},
  37. {"pkg": "1", "pin": "1", "item": "33"},
  38. {"pkg": "0", "pin": "2", "item": "34"},
  39. {"pkg": "1", "pin": "3", "item": "35"},
  40. {"pkg": "0", "pin": "4", "item": "36"},
  41. {"pkg": "1", "pin": "5", "item": "37"},
  42. {"pkg": "0", "pin": "6", "item": "38"},
  43. {"pkg": "1", "pin": "7", "item": "39"},
  44. {"pkg": "0", "pin": "8", "item": "40"},
  45. {"pkg": "1", "pin": "9", "item": "41"}
  46. ]
  47. }

I have used the below Structure to store the values from json

  1. package basics
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. "strconv"
  8. )
  9. type NNodes struct {
  10. Items []NodeItem `json:"items"`
  11. }
  12. type NodeItem struct {
  13. Pkg string `json:"pkg"`
  14. Pin string `json:"pin"`
  15. Item string `json:"item"`
  16. }
  17. func parser() {
  18. data, _ := ioutil.ReadFile("list.json")
  19. var result NNodes
  20. var pkg, pin, item int
  21. json.Unmarshal(data, &result)
  22. foobar := make(map[int]map[int][]int)
  23. siblings := make(map[int][]int)
  24. for _, value := range result.items {
  25. if pkg, err = strconv.Atoi(value.Pkg); err != nil {
  26. break
  27. }
  28. if pin, err = strconv.Atoi(value.Pin); err != nil {
  29. break
  30. }
  31. if item, err = strconv.Atoi(value.Item); err != nil {
  32. break
  33. }
  34. siblings[pin] = append(siblings[pin], item)
  35. foobar[pkg] = siblings
  36. }
  37. fmt.Println(foobar)
  38. }
  39. what i am getting is below output:
  40. map[0:map[0:[0 32] 1:[1 33] 2:[2 34] 3:[3 35] 4:[4 36] 5:[5 37] 6:[6 38] 7:[7 39] 8:[8 40] 9:[9 41] 10:[10 42] 11:[11 43] 12:[12 44] 13:[13 45] 14:[14 46] .. so on

what i am looking for is to have maps with unique pkg as below:

// Expected map output of foobar map.. basically there are 2 similar pin entries, and their corresponding item should be added to same slice.

  1. map[0:map[0:[0,32] 2:[2,34] 4[4:36] 6[6:38]...
  2. map[1:map[1:[1,33] 3:[3,35] 5[5:37] 7[7:39]...

Any hints on where i am going wrong.

答案1

得分: 2

使用以下代码解决了该问题:

  1. package basics
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. "strconv"
  8. )
  9. type NNodes struct {
  10. Items []NodeItem `json:"items"`
  11. }
  12. type NodeItem struct {
  13. Pkg string `json:"pkg"`
  14. Pin string `json:"pin"`
  15. Item string `json:"item"`
  16. }
  17. func parser() {
  18. data, _ := ioutil.ReadFile("list.json")
  19. var result NNodes
  20. var pkg, pin, item int
  21. json.Unmarshal(data, &result)
  22. foobar := make(map[int]map[int][]int)
  23. for _, value := range result.Items {
  24. if pkg, err := strconv.Atoi(value.Pkg); err != nil {
  25. break
  26. }
  27. if pin, err := strconv.Atoi(value.Pin); err != nil {
  28. break
  29. }
  30. if item, err := strconv.Atoi(value.Item); err != nil {
  31. break
  32. }
  33. if foobar[pkg] == nil {
  34. foobar[pkg] = make(map[int][]int)
  35. foobar[pkg][pin] = append(foobar[pkg][pin], item)
  36. } else {
  37. foobar[pkg][pin] = append(foobar[pkg][pin], item)
  38. }
  39. }
  40. fmt.Println(foobar)
  41. }
英文:

Was able to resolve the issue using the below code:

  1. package basics
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. "strconv"
  8. )
  9. type NNodes struct {
  10. Items []NodeItem `json:"items"`
  11. }
  12. type NodeItem struct {
  13. Pkg string `json:"pkg"`
  14. Pin string `json:"pin"`
  15. Item string `json:"item"`
  16. }
  17. func parser() {
  18. data, _ := ioutil.ReadFile("list.json")
  19. var result NNodes
  20. var pkg, pin, item int
  21. json.Unmarshal(data, &result)
  22. foobar := make(map[int]map[int][]int)
  23. for _, value := range result.items {
  24. if pkg, err = strconv.Atoi(value.Pkg); err != nil {
  25. break
  26. }
  27. if pin, err = strconv.Atoi(value.Pin); err != nil {
  28. break
  29. }
  30. if item, err = strconv.Atoi(value.Item); err != nil {
  31. break
  32. }
  33. if foobar[pkg] == nil {
  34. f[pkg] = make(map[int][]int)
  35. f[pkg][pin] = append(f[pkg][pin], item)
  36. else {
  37. f[pkg][pin] = append(f[pkg][pin], item)
  38. }
  39. }
  40. fmt.Println(foobar)
  41. }

huangapple
  • 本文由 发表于 2022年7月26日 17:53:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/73121292.html
匿名

发表评论

匿名网友

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

确定