Guest User

Untitled

a guest
Jul 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "io/ioutil"
  6. "fmt"
  7. "os"
  8.  
  9. )
  10.  
  11. type Component struct {
  12. Name string `json:"name"`
  13. }
  14.  
  15. type ComponentMap map[string]*Component
  16.  
  17. type Stack struct {
  18. Components ComponentMap
  19. }
  20.  
  21. type Project struct {
  22. Stack Stack `json:"stack"`
  23. }
  24.  
  25. func LoadProject() Project {
  26. raw, err := ioutil.ReadFile("./project.json")
  27. if err != nil {
  28. fmt.Println(err.Error())
  29. os.Exit(1)
  30. }
  31. var project Project
  32. json.Unmarshal(raw, &project)
  33. return project
  34. }
  35. func main() {
  36. project:= LoadProject()
  37. println(project.Stack.Components["box/webproxy"].Name)
  38.  
  39. }
  40. func (s *Stack) UnmarshalJSON(b []byte) error {
  41. var raw interface{}
  42.  
  43. if err := json.Unmarshal(b, &raw); err != nil {
  44. return err
  45. }
  46. s.Components = make(ComponentMap)
  47.  
  48. mi := raw.(map[string]interface{})
  49. for k, v := range mi {
  50.  
  51. vv := fmt.Sprintf("%#v",v)[len("map[string]interface {}"):]
  52. var c Component
  53. if err := json.Unmarshal([]byte(vv), &c); err != nil {
  54. return err
  55. }
  56. s.Components[k] = &c
  57. }
  58.  
  59. return nil
  60. }
Add Comment
Please, Sign In to add comment