How I can write the value of mongo objectid in json string in golang

Issue

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.

Solution

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.

Answered By – icza

Answer Checked By – Mildred Charles (GoLangFix Admin)

Leave a Reply

Your email address will not be published.