簡體   English   中英

Golang - 無法將數字解組為字符串類型的 Go 值

[英]Golang - Cannot unmarshal number into Go value of type string

當嘗試json.Unmarshal一些 JSON 代碼從網站到我創建的結構時,我收到以下錯誤:

無法將數字解組為字符串類型的 Go 值

這是我的代碼: https://play.golang.org/p/-5nphV9vPw

結構定義中存在多個錯誤。 這里是固定版本。

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

基本上,結構存在一些問題; 人們可能想使用JSON-to-Go

有一個特別的問題,我遇到的是這樣的:

json:無法將數字解組為 Go 字符串類型的結構字段id

這意味着 Go 無法將 JSON 數字(例如"id": 35 )編組為 Go 字符串屬性

  • 它要么id變成一個字符串"id": "35" ; 或者
  • id類型更改為 int 類型
type movie struct {
    Genres []struct {
        Id   int
        Name string
    }
}

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

這對我有用(更正版):

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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM