【问题标题】:Sending boolean value through application/json curl request通过 application/json curl 请求发送布尔值
【发布时间】:2017-09-30 07:48:48
【问题描述】:

我正在尝试发送 curl 请求。这是我的要求:

curl -H "Content-Type: application/json" -X POST -d '{"username":"tahereh","password":"1234", "admin":true}' http://localhost:8000/users

我在我的代码中解码此请求并将其存储在代码的用户结构的“用户变量”中,如下所示:

var newUser models.User //User is an struct in model package
err1 := json.NewDecoder(r.Body).Decode(&newUser)

然后我使用dlv debug 命令行调试我的代码。我的问题是当我在dlv 中打印newUserprint newUser 时,所有变量都正确设置,但布尔值除外。当我通过 curl 请求发送真值时,它设置为假!

要点:我打印了err1,它也是空的。

【问题讨论】:

  • 发布您的models.User 类型。
  • type User struct { ID uint64 json:"id" gorm:"primary_key;AUTO_INCREAMENT" Username string json:"username,omitempty" gorm:"size:100;not null;unique" Password string json:"password,omitempty" gorm:"size:200;not null" Admin bool json:"admin" gorm:"not null;default=flase" Charges Charge json:"charges,omitempty" gorm:"ForeignKey:UserID" Income Income json:"incomes,omitempty" gorm:"ForeignKey:UserID" }

标签: json curl go


【解决方案1】:

在您的 models.User 类型中,您明确指定要从 JSON 处理中排除 Admin 字段(这就是 json:"-" 标记值的含义),因此它的值留给它的 zero value(即 @987654326 @ 代表bool 类型)。

将其标签更改为json:"admin",因此其值将从JSON "admin" 属性中设置,如下例所示:

type User {
    // your other fields...
    Admin bool `json:"admin" gorm:"not null;default=false"`
}

在此处阅读有关结构标签的更多信息:What are the use(s) for tags in Go?

【讨论】:

    【解决方案2】:

    原则上,这应该可行:

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type User struct {
        Username string
        Password string
        Admin    bool
    }
    
    func main() {
        var u User
        // var u models.User
        j := []byte(`{"username":"tahereh","password":"1234", "admin":true}`)
        err := json.Unmarshal(j, &u)
        if err != nil {
            fmt.Printf("error:%v", err)
            return
        }
    
        fmt.Printf("User:%v", u)
    }
    

    由于它部分适用于您,因此 json 可能被读取正常。所以也许拿这个示例代码,并开始使用你的模型。用户类型代替用户,看看它是否仍然可以解组。

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 2017-11-21
      • 2018-04-12
      • 2018-06-21
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多