0

I'm building a web server with Go and I don't know how to process JSON with Go.

Saying that I have a struct as below:

type User struct{
    Id int
    Name string
    Password string
    Status int
}

and now I have had an object of the struct User:

user := User{1, "Test", "password", 1}

Now I need to convert user to a JSON object. Here is what I've found:

b, err := json.Marshal(user)
fmt.Println(string(b))

It works well.
Now I want to do two things:
1) remove the Password from the JSON object
2) add a new filed: "code": 200 into the JSON object

What should I do?

1

2 Answers 2

2

If you want to keep the Password property accessible to outer packages, you can set a tag: json:"-" on it. As specified in the docs:

The encoding of each struct field can be customized by the format string stored under the "json" key in the struct field's tag. The format string gives the name of the field, possibly followed by a comma-separated list of options. The name may be empty in order to specify options without overriding the default field name.

The "omitempty" option specifies that the field should be omitted from the encoding if the field has an empty value, defined as false, 0, a nil pointer, a nil interface value, and any empty array, slice, map, or string.

As a special case, if the field tag is "-", the field is always omitted. Note that a field with name "-" can still be generated using the tag "-,".

type User struct {
    Id       int
    Name     string
    Password string `json:"-"`
    Status   int
    Code     int `json:"code"`
}
0

make Password lower case (and add Code int to your struct):
Try this:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    user := User{1, "Test", "password", 1, 200}
    b, err := json.Marshal(user)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(b))
}

type User struct {
    Id       int
    Name     string
    password string
    Status   int
    Code     int
}

output:

{"Id":1,"Name":"Test","Status":1,"Code":200}
0

Not the answer you're looking for? Browse other questions tagged or ask your own question.