如何从 bson 文档中渲染 json 字符串

How to render a json string from bson document

我正在努力从 Go 中的 BSON 文档为 API 创建一个有效的 JSON 字符串。 假设我有一个这样的对象:

type MyObject struct {
    Name string
}

我将我的数据库 returns 称为包含许多文档的游标,如:[{"Name": "object_name"}, ...]

我可以通过

这样的循环检索所有文档
for cur.Next(ctx) {
    var obj MyObject
    err := cur.Decode(&obj)
    //then display error if there's one        
}

现在我想得到一个 JSON 字符串,其中包含我的数据库返回的所有文档,以便通过 HTTP 发送它。

因为,如果使用 I fmt.Println(obj),我最终会得到这样的结果:[{object1_name} {object2_name} ...] 根据我的说法,这不是我可以用于 API 的有效格式.

我知道 json.Marshal(obj) 实际上可以编码为有效的 JSON 并且我可以使用 os.Stdout.Write(obj) 对其进行解码,但我没有设法将这个有效的字符串存储在变量中。我怎样才能做到这一点?

来自 Golang documentation 用于 json

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    type ColorGroup struct {
        ID     int      `json:"id"`
        Name   string   `json:"name"`
        Colors []string `json:"colors"`
    }
    group := ColorGroup{
        ID:     1,
        Name:   "Reds",
        Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
    }
    b, err := json.Marshal(group)
    if err != nil {
        fmt.Println("error:", err)
    } else {
        str := string(b)
        fmt.Println("stringified json is:", str)

    }
}


Output
stringified json is: {"id":1,"name":"Reds","colors":["Crimson","Red","Ruby","Maroon"]}

json.Marshalreturn两个值——一个byte arrayerror 如果 errornil 那么您可以通过将 byte array 转换为 string 来获取字符串 str := string(b)