Home > front end >  Go - Save JSON string into a DB (most efficient?)
Go - Save JSON string into a DB (most efficient?)

Time:03-02

I am getting a JSON response from a server and want to save that into a db, where one of the columns is a JSON column. The response looks similar to the following:

msgJson = [{"id": 1, "type": "dog", "attributes": {"weight":20, "sound":"bark"}}]

So I am currently making a struct and trying to update each element in the DB.

type Animal struct {
    Id int `json:"id"`
    Type string `json:"type"`
    Attributes string `json:"attributes"`
}

var animals []Animal

json.Unmarshal([]byte(msgJson), &animals)

sqlStatement := `
    UPDATE animals
    SET type = $2, attributes = $3
    WHERE id = $1;`

_, err := db.Exec(
    sqlStatement,
    animals[0].Id,
    animals[0].Type,
    animals[0].Attributes)

Of course, this doesn't work, because the attributes field is supposed to be JSON.

I believe I could Unmarshal the JSON into nested structs, and then Marshal it when updating the DB, but since this will have many fields, is there a way to take the string and immediately represent it as JSON when adding to the DB? I hope that question makes sense.

Thank you

CodePudding user response:

Unmarshal the attributes field to a json.RawMessage. Save the raw message to the database.

type Animal struct {
    Id int `json:"id"`
    Type string `json:"type"`
    Attributes json.RawMessage `json:"attributes"`
}

⋮

_, err := db.Exec(
    sqlStatement,
    animals[0].Id,
    animals[0].Type,
    animals[0].Attributes)
  •  Tags:  
  • go
  • Related