tahereh firoozian tahereh firoozian - 3 years ago 181
JSON Question

Sending boolean value through application/json curl request

I'm trying to send a curl request. This is my request:

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

I decode this request in my code and store it in 'user var' of code's User struct, like this:

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

Then I debug my code with
dlv debug
command line. My problem is when I print
print newUser
all of the variable correctly set except the boolean value. While I'm sending the true value through curl request, it sets to false!

point: I have printed the err1, it's also null.

Answer Source

In your models.User type you explicitly specified to exclude the Admin field from JSON processing (this is what the json:"-" tag value means), so its value is left to its zero value (which is false for the bool type).

Change its tag to json:"admin" and so its value will be set from the JSON "admin" property, like in this example:

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

Read more about struct tags here: What are the use(s) for tags in Go?

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download