Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "log"
  8. "strconv"
  9. )
  10.  
  11. // PersonJSON 人
  12. type PersonJSON struct {
  13. ID interface{} `json:"id"`
  14. }
  15.  
  16. // Person 出力用
  17. type Person struct {
  18. ID int `json:"id"`
  19. }
  20.  
  21. func main() {
  22. // JSONファイル読み込み
  23. bytes, err := ioutil.ReadFile("hoge.json")
  24. if err != nil {
  25. log.Fatal(err)
  26. }
  27. // JSONデコード
  28. var personJSON []PersonJSON
  29. if err := json.Unmarshal(bytes, &personJSON); err != nil {
  30. log.Fatal(err)
  31. }
  32. // デコードしたデータを表示
  33. var people []Person
  34. for _, p := range personJSON {
  35. var person Person
  36. // 型スイッチ
  37. switch p.ID.(type) {
  38.  
  39. case int, int32, int64:
  40. log.Println("int vとは")
  41. num, ok := p.ID.(int64)
  42. if ok == false {
  43. log.Fatal("型キャストに失敗", num)
  44. }
  45. person.ID = int(num)
  46.  
  47. case float32, float64:
  48. log.Println("float vとは")
  49. num, ok := p.ID.(float64)
  50. if ok == false {
  51. log.Fatal("型キャストに失敗")
  52. }
  53. person.ID = int(num)
  54.  
  55. case string:
  56. log.Println("string vとは")
  57. numAsStr, ok := p.ID.(string)
  58. if ok == false {
  59. log.Fatal("型キャストに失敗")
  60. }
  61. num, err := strconv.Atoi(numAsStr)
  62. if err != nil {
  63. log.Fatal("型キャストに失敗")
  64. }
  65. person.ID = num
  66.  
  67. default:
  68. log.Fatal("その他の型")
  69. }
  70.  
  71. people = append(people, person)
  72. }
  73.  
  74. // ログ
  75. for _, p := range people {
  76. fmt.Printf("%#v \n", p)
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement