英文:
How I can write the value of mongo objectid in json string in golang
问题
objectid始终是唯一且不可预测的。我希望这个变量应该取primitive.NewObjectID.Hex()的值。
var mockData = `{"status":201,"message":"用户创建成功!","data":{"data":"{"InsertedID":primitive.NewObjectID().Hex()}"}}`
但是像这样写会使输出变成一个普通的字符串。
英文:
The objectid is always unique and unpredictable. I want that, this var should take value of primitive.NewObjectID.Hex()
var mockData = `{"status":201,"message":"User Created Successfully!","data":{"data":"{"InsertedID":primitive.NewObjectID().Hex()}"}}`
But writing it like this gives me a straight string in output.
答案1
得分: 1
你需要“打破”字符串字面量,并使用+
进行连接:
var mockData = `{"status":201,"message":"User Created Successfully!","data":{"data":{"InsertedID":"` + primitive.NewObjectID().Hex() + `"}}}`
这样做是可行的,因为十六进制对象ID在JSON中不需要特殊转义,但通常情况下,你应该使用encoding/json
包生成有效的JSON(它知道正确的转义方式)。
使用encoding/json
包,代码可能如下所示:
var s struct {
Status int `json:"status"`
Message string `json:"message"`
Data struct {
Data struct {
InsertedID string
} `json:"data"`
} `json:"data"`
}
s.Status = 201
s.Message = "User Created Successfully!"
s.Data.Data.InsertedID = primitive.NewObjectID().Hex()
out, err := json.Marshal(s)
if err != nil {
panic(err)
}
fmt.Println(string(out))
你可以在Go Playground上尝试这些示例。
英文:
You have to "break" the string literal and concatenate the parts using +
:
var mockData = `{"status":201,"message":"User Created Successfully!","data":{"data":{"InsertedID":"` + primitive.NewObjectID().Hex() + `"}}}`
This will work because the hex object ID does not need any special escaping in JSON, but in general you should use the encoding/json
package to generate valid JSON (which knows about proper escaping).
Using the encoding/json
package this is how it could look like:
var s struct {
Status int `json:"status"`
Message string `json:"message"`
Data struct {
Data struct {
InsertedID string
} `json:"data"`
} `json:"data"`
}
s.Status = 201
s.Message = "User Created Successfully!"
s.Data.Data.InsertedID = primitive.NewObjectID().Hex()
out, err := json.Marshal(s)
if err != nil {
panic(err)
}
fmt.Println(string(out))
Try the examples on the Go Playground.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论