【问题标题】:How can I get JSON from BSON without my keys all being named "Key"?如果我的密钥都被命名为“密钥”,如何从 BSON 获取 JSON?
【发布时间】:2019-05-08 01:50:04
【问题描述】:

我正在尝试从数据库中读取,然后将结果作为 json 返回给用户。

发生的事情是我得到如下输出:
[{"Key":"foo","Value":"bar"}]

当我想得到:
"{"foo":"bar"}"

如何获得前者?

示例:(未显示从数据库读取并将Raw 转换为字符串)

package main

import (
    "encoding/json"
    "fmt"

    "go.mongodb.org/mongo-driver/bson"
)

func main() {

    var data = "{\"foo\":\"bar\"}"
    var testInterface interface{}
    e := bson.UnmarshalExtJSON([]byte(data), false, &testInterface)
    if e != nil {
        fmt.Println("err is ", e)
    }
    out, _ := json.Marshal(testInterface)
    fmt.Println(string(out))
    // prints: [{"Key":"foo","Value":"bar"}]
}

【问题讨论】:

    标签: go bson mongo-go


    【解决方案1】:

    您需要提供映射而不是接口来获取键值对形式的值。

    试试:

    package main
    
    import (
        "encoding/json"
        "fmt"
    
        "go.mongodb.org/mongo-driver/bson"
    )
    
    func main() {
    
        var data = "{\"foo\":\"bar\"}"
        var testInterface map[string]string
        e := bson.UnmarshalExtJSON([]byte(data), false, &testInterface)
        if e != nil {
            fmt.Println("err is ", e)
        }
    
        out, _ := json.Marshal(testInterface)
        fmt.Println(string(out))
        // prints: {"foo":"bar"}
    }
    

    【讨论】:

    • 如果您有其他不是字符串的值,您可以使用map[string]interface{},对吗?还是会导致问题?
    • map[string]interface{} 会起作用。但是,仅在您不知道data 的结构时才建议使用。如果你这样做,你应该创建一个结构。
    猜你喜欢
    • 2012-11-03
    • 2018-11-29
    • 2018-06-14
    • 2022-10-21
    • 2020-11-28
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多