在Golang中,JSON中的布尔值true应该是小写的true,而不是首字母大写的True。

huangapple go评论79阅读模式
英文:

golang json 'true' is no True?

问题

我正在学习Golang,关于JSON到结构体的转换,获取布尔值始终为false,如果我的JSON中的"remember"字段为true,如何解决?以下是你的代码:

package main

import (
	"encoding/json"
	"fmt"
)

type AdminInfoRequest struct {
	Id          uint   `json:"id"`
	UserName    string `json:"username"`
	Password    string `json:"password"`
	CaptchaId   string `json:"captcha_id"`
	Captcha     string `json:"captcha"`
	Remember    bool   `json:"remember"`
	Status      uint   `json:"status"`
	GroupId     uint   `json:"group_id"`
	OldPassword string `json:"old_password"`
	RePassword  string `json:"re_password"`
}

func main() {
	var s AdminInfoRequest
	j := `{"username":"admin","remember":"true"}`
	json.Unmarshal([]byte(j), &s)
	fmt.Println(s.UserName)
	fmt.Println(s.Remember)
}

你的代码中,Remember字段的类型是bool,但是你的JSON中的"remember"字段的值是字符串类型的"true"。这会导致json.Unmarshal函数无法正确解析该字段。要解决这个问题,你可以将JSON中的"remember"字段的值改为布尔类型的true,而不是字符串类型的"true"。修改后的代码如下:

package main

import (
	"encoding/json"
	"fmt"
)

type AdminInfoRequest struct {
	Id          uint   `json:"id"`
	UserName    string `json:"username"`
	Password    string `json:"password"`
	CaptchaId   string `json:"captcha_id"`
	Captcha     string `json:"captcha"`
	Remember    bool   `json:"remember"`
	Status      uint   `json:"status"`
	GroupId     uint   `json:"group_id"`
	OldPassword string `json:"old_password"`
	RePassword  string `json:"re_password"`
}

func main() {
	var s AdminInfoRequest
	j := `{"username":"admin","remember":true}`
	json.Unmarshal([]byte(j), &s)
	fmt.Println(s.UserName)
	fmt.Println(s.Remember)
}

这样修改后,你将能够正确地获取到布尔值true。

英文:

I am just learning golang, json to struct,Get boolean value is always false,
if my json "remember":true, get boolean value is true,how to solve?
my code

package main

import (
	"encoding/json"
	"fmt"
)

type AdminInfoRequest struct {
	Id          uint   `json:"id"`
	UserName    string `json:"username"`
	Password    string `json:"password"`
	CaptchaId   string `json:"captcha_id"`
	Captcha     string `json:"captcha"`
	Remember    bool   `json:"remember"`
	Status      uint   `json:"status"`
	GroupId     uint   `json:"group_id"`
	OldPassword string `json:"old_password"`
	RePassword  string `json:"re_password"`
}

func main() {
	var s AdminInfoRequest
	j := `{"username":"admin","remember":"true"}`
	json.Unmarshal([]byte(j), &s)
	fmt.Println(s.UserName)
	fmt.Println(s.Remember)
}

答案1

得分: 3

在JSON中,"true"是一个字符串值。尝试这样写:

j := `{"username":"admin","remember":true}`
英文:

In JSON, "true" is a string value. Try this:

j := `{"username":"admin","remember":true}`

huangapple
  • 本文由 发表于 2022年12月15日 13:48:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/74807280.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定