随笔 - 1062  文章 - 0  评论 - 82  阅读 - 226万

golang学习笔记--struct同时用于bson json

1
2
3
4
5
type User struct {
  Name    string        `json:"name,omitempty" bson:"name,omitempty"`
  Secret  string        `json:"-,omitempty" bson:"secret,omitempty"`
 
}

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package bson_json
  
import (
    "encoding/json"
    "errors"
    "fmt"
    "gopkg.in/mgo.v2/bson"
    "os"
    "testing"
)
  
type User struct {
    Name    string  `json:"name,omitempty" bson:"name,omitempty"`
    CSDN  string  `json:"csdn,omitempty" bson:"csdn,omitempty"`
    Quote      string  `json:"quote,omitempty" bson:"quote,omitempty"`
}
  
var user = User{
    Name: "许大侠",
    CSDN : "https://blog.csdn.net/halo_hsuh",
    Quote: "听我一言, 看清远方",
}
  
func toBsonBytes() []byte {
    /* 结构体序列化成bson格式[]byte */
    data, err := bson.Marshal(user)
    if nil != err {
        fmt.Println("序列化Bson失败")
        return nil
    }
    return data
}
  
func toJsonBytes() []byte {
    /* 结构体序列化成bson格式[]byte */
    data, err := json.Marshal(user)
    if nil != err {
        fmt.Println("序列化Json失败")
        return nil
    }
  
    return data
}
  
func ToFile(fileName string, data []byte) error {
    file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0666)
    if nil != err {
        return err
    }
  
    length, err := file.Write(data)
    if nil != err {
        return err
    }
  
    if length < len(data) {
        return errors.New("Write Error: Length Error.")
    }
  
    return nil
}
  
func Print(u User) {
    fmt.Println("名字: ", u.Name,
        "; CSDN: ", u.CSDN,
        "; 名言: ", u.Quote)
}
  
func TestBson(t *testing.T) {
    var tempUser User
  
    data := toBsonBytes()
  
    /* bson格式[]byte 反序列化成结构体 */
    err := bson.Unmarshal(data, &tempUser)
    if nil != err {
        fmt.Println("反序列化Bson失败", err)
        return
    }
  
    Print(tempUser)
  
    ToFile("./hello.bson", data) // 将序列化的数据存储进文件
}
  
func TestJson(t *testing.T) {
    var tempUser User
  
    data := toJsonBytes()
  
    /* bson格式[]byte 反序列化成结构体 */
    err := json.Unmarshal(data, &tempUser)
    if nil != err {
        fmt.Println("反序列化Json失败: ", err)
        return
    }
  
    Print(tempUser)
  
    ToFile("./hello.json", data) // 将序列化的数据存储进文件
}
  
func TestJsonToBson(t *testing.T) {
    // 获取json []byte
    data := toJsonBytes()
  
    fmt.Println(data)
    var tempUser User
    // 将json转化成bson 结构体
    err := bson.UnmarshalJSON(data, &tempUser)
    if nil != err {
        fmt.Println("Json 转 Bson失败: ", err)
    }
  
    Print(tempUser)
  
    // 结构体再转化为json
    data2, err := bson.MarshalJSON(tempUser)
    if nil != err {
        fmt.Println("Bson 转 Json失败: ", err)
    }
  
    fmt.Println(data2)
 
}

  

posted on   清明-心若淡定  阅读(2844)  评论(0编辑  收藏  举报
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示