如何处理JSON

时间:2017-10-23 06:58:53

标签: json go struct

我正在使用Go构建一个Web服务器,我不知道如何使用Go处理JSON。

说我有一个结构如下:

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

现在我有了一个结构用户的对象:

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

现在我需要将user转换为JSON对象。这是我发现的:

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

效果很好。
现在我想做两件事:
1)从JSON对象中删除Password
2)将新的字段"code": 200添加到JSON对象中

我该怎么办?

2 个答案:

答案 0 :(得分:2)

如果要让外部包可以访问Password属性,可以在其上设置标记:json:"-"。正如docs

中所述
  

可以按格式自定义每个结构字段的编码   存储在struct field标签中“json”键下的字符串。该   format string给出了字段的名称,可能后跟a   以逗号分隔的选项列表。该名称可能为空   指定选项而不覆盖默认字段名称。

     

“omitempty”选项指定应省略该字段   如果字段具有空值,则编码,定义为false,0,a   nil指针,一个nil接口值,以及任何空数组,切片,map,   或字符串。

     

作为一种特殊情况,如果字段标记为“ - ”,则该字段始终为   省略即可。请注意,仍然可以使用生成名称为“ - ”的字段   标签“ - ,”。

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

答案 1 :(得分:0)

Password小写(并将Code int添加到您的结构中):
试试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
}

输出:

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