Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "encoding/json"
- "fmt"
- "io/ioutil"
- "log"
- "strconv"
- )
- // PersonJSON 人
- type PersonJSON struct {
- ID interface{} `json:"id"`
- }
- // Person 出力用
- type Person struct {
- ID int `json:"id"`
- }
- func main() {
- // JSONファイル読み込み
- bytes, err := ioutil.ReadFile("hoge.json")
- if err != nil {
- log.Fatal(err)
- }
- // JSONデコード
- var personJSON []PersonJSON
- if err := json.Unmarshal(bytes, &personJSON); err != nil {
- log.Fatal(err)
- }
- // デコードしたデータを表示
- var people []Person
- for _, p := range personJSON {
- var person Person
- // 型スイッチ
- switch p.ID.(type) {
- case int, int32, int64:
- log.Println("int vとは")
- num, ok := p.ID.(int64)
- if ok == false {
- log.Fatal("型キャストに失敗", num)
- }
- person.ID = int(num)
- case float32, float64:
- log.Println("float vとは")
- num, ok := p.ID.(float64)
- if ok == false {
- log.Fatal("型キャストに失敗")
- }
- person.ID = int(num)
- case string:
- log.Println("string vとは")
- numAsStr, ok := p.ID.(string)
- if ok == false {
- log.Fatal("型キャストに失敗")
- }
- num, err := strconv.Atoi(numAsStr)
- if err != nil {
- log.Fatal("型キャストに失敗")
- }
- person.ID = num
- default:
- log.Fatal("その他の型")
- }
- people = append(people, person)
- }
- // ログ
- for _, p := range people {
- fmt.Printf("%#v \n", p)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement