问题
I'm trying to read from a database and then return the result to the user as json.
What's happening is that I'm getting output like:[{"Key":"foo","Value":"bar"}]
When I would like to get:"{"foo":"bar"}"
How do I get the former?
Example: (reading from the db and converting Raw
to string are not shown)
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"}]
}
回答1:
You need to provide a map instead of an interface to get value as a key-value pair.
Try:
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"}
}
来源:https://stackoverflow.com/questions/56027875/how-can-i-get-json-from-bson-without-my-keys-all-being-named-key