我从外部源获取JSON数据.这个JSON中的字段名称不是我想带的东西,所以我将它们转换为使用json:"originalname"标签对我有意义的名称.
当我将这样的对象编组回JSON时,我自然会再次获得丑陋的(原始)名称.
编组时是否有办法忽略标签?或者为马歇尔和unmarshall指定不同名称的方法?
为了澄清,我在操场上准备了一个例子,并在下面粘贴了相同的代码.
提前致谢.
package main
import (
"encoding/json"
"fmt"
)
type Band struct {
Name string `json:"bandname"`
Albums int `json:"albumcount"`
}
func main() {
// JSON -> Object
data := []byte(`{"bandname": "AC/DC","albumcount": 10}`)
band := &Band{}
json.Unmarshal(data, band)
// Object -> JSON
str, _ := json.Marshal(band)
fmt.Println("Actual Result: ", string(str))
fmt.Println("Desired Result:", `{"Name": "AC/DC","Albums": 10}`)
// Output:
// Actual Result: {"bandname":"AC/DC","albumcount":10}
// Desired Result: {"Name": "AC/DC","Albums": 10}
}
Run Code Online (Sandbox Code Playgroud)
你可以实施
type Marshaler interface {
MarshalJSON() ([]byte, error)
}
Run Code Online (Sandbox Code Playgroud)
来自标准库的encoding/json包.例:
type Band struct {
Name string `json:"bandname"`
Albums int `json:"albumcount"`
}
func (b Band) MarshalJSON() ([]byte, error) {
n, _ := json.Marshal(b.Name)
a, _ := json.Marshal(b.Albums)
return []byte(`{"Name":` + string(n) + `,"Albums":` + string(a) + `}`)
}
Run Code Online (Sandbox Code Playgroud)
不过,这无疑是一个非常好的解决方案.
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |