简体   繁体   中英

Golang - Cannot unmarshal number into Go value of type string

When trying to json.Unmarshal some JSON code from a website into a struct I created, I receive the following error:

cannot unmarshal number into Go value of type string

Here is my code: https://play.golang.org/p/-5nphV9vPw

There are multiple errors in the struct definition. Here is fixed version.

https://play.golang.org/p/O39E3CdKes

Basically, there are some problems with the structs; One might want to use JSON-to-Go

There is a particular problem, I encountered is something like this:

json: cannot unmarshal number into Go struct field id of type string

Which means Go can't marshal a JSON number, like "id": 35 , into a Go string property

  • it's either id becomes a string "id": "35" ; or
  • change the id type in to an int type
type movie struct {
    Genres []struct {
        Id   int
        Name string
    }
}

https://go.dev/play/p/6m_Sz9s7GoT

this works for me (corrected version):

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

type movie struct {
    Adult         bool
    Backdrop_path string
    Budget        int
    Genres        []struct {
        Id   int // string
        Name string
    }
    Homepage             string
    Id                   int
    Imdb_id              string
    Original_language    string
    Original_title       string
    Overview             string
    Popularity           float64 //    string
    Poster_path          string
    Production_companies []struct {
        Name string
        Id   int
    }
    Production_countries []struct {
        Name string
    }
    Release_date     string
    Revenue          int
    Runtime          int
    Spoken_languages []struct {
        Name string
    }
    Status       string
    Tagline      string
    Title        string
    Video        bool
    Vote_average float64
    Vote_count   int
    Embedurl     string
}

func main() {
    var movieData movie
    str := `
    {
    "adult":false,
    "backdrop_path":"/mWuHbFc7qVmVcpybx3ezhXLj5VO.jpg",
    "belongs_to_collection":null,
    "budget":25000000,
    "genres":
        [
        {
            "id":35,
            "name":"Comedy"
        },
        {
            "id":37,
            "name":"Western"
        }
        ],
    "homepage":"",
    "id":8388,
    "imdb_id":"tt0092086",
    "original_language":"en",
    "original_title":"¡Three Amigos!",
    "overview":"Three unemployed actors accept an invitation to a Mexican village to replay their bandit fighter roles, unaware that it is the real thing.",
    "popularity":0.799492,
    "poster_path":"/ehCzedovkiM8CnDeuSSHlRbdfxI.jpg",
    "production_companies":
    [{
        "name":"L.A. Films",
        "id":960
     },
     {
        "name":"Home Box Office (HBO)",
        "id":3268
     }],
    "production_countries":
    [{
        "iso_3166_1":"US",
        "name":"United States of America"
    }],
    "release_date":"1986-12-12",
    "revenue":0,
    "runtime":102,
    "spoken_languages":
    [{
        "iso_639_1":"en",
        "name":"English"
    },{
        "iso_639_1":"de",
        "name":"Deutsch"
    },{
        "iso_639_1":"es",
        "name":"Español"
    }],
    "status":"Released",
    "tagline":"They're Down On Their Luck And Up To Their Necks In Senoritas, Margaritas, Banditos And Bullets!",
    "title":"Three Amigos",
    "video":false,
    "vote_average":6.2,
    "vote_count":116
    }`
    err := json.Unmarshal([]byte(str), &movieData)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(movieData)
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM