Appending JSON struct to JSON file Golang

14,895

To achieve your output, define struct as follows-

type Identification struct {
   ID    string
   Phone int64
   Email string
}

And perform operation as follows-

// define slice of Identification
var idents []Identification

// Unmarshall it
err := json.Unmarshal([]byte(jsonText), &idents)

// add further value into it
idents = append(idents, Identification{ID: "ID", Phone: 15555555555, Email: "Email"})

// now Marshal it
result, error := json.Marshal(idents)

// now result has your targeted JSON structure

Sample program of above explanation https://play.golang.org/p/67dqOaCWHI

Share:
14,895
Rohit Panikar
Author by

Rohit Panikar

Updated on June 18, 2022

Comments

  • Rohit Panikar
    Rohit Panikar almost 2 years

    I have a JSON document of Users where they have an ID#, Phone#, and Email. Upon input of another ID, Phone, and Email, I want to take a new user's information and append it to the file. I have a structure that only contains an {ID: #, Phone: #, Email: #} and that's working fine. But my JSON file becomes as such:

    [{"ID":"ABCD","Phone":1234567890,"Email":"[email protected]"}]
    [{"ID":"EFGH","Phone":1234567890,"Email":"[email protected]"}]
    [{"ID":"IJKL","Phone":1234567890,"Email":"[email protected]"}]
    [{"ID":"MNOP","Phone":1234567890,"Email":"[email protected]"}]
    [{"ID":"QRST","Phone":1234567890,"Email":"[email protected]"}]
    [{"ID":"UVWX","Phone":1234567890,"Email":"[email protected]"}]
    

    So I'm able to append to the document, but it's a new JSON structure enclosed by brackets []. Below is my code. I omitted the actual hashed ID.

    func ToIds(e string, p int64) {
        hashed := GenId()
        var jsonText = []byte(`[
            {"ID": "", "Phone": 0, "Email": ""}
        ]`)
        var I Identification
        err := json.Unmarshal([]byte(jsonText), &I)
        if err != nil {
            fmt.Println(err)
        }
        I[0].ID = hashed
        I[0].Phone = p
        I[0].Email = e
    
        result, error := json.Marshal(I)
        if error != nil {
            fmt.Println(error)
        }
    
        f, erro := os.OpenFile("FILE_PATH", os.O_APPEND|os.O_WRONLY, 0666)
        if erro != nil {
            fmt.Println(erro)
        }
    
        n, err := io.WriteString(f, string(result))
        if err != nil {
            fmt.Println(n, err)
        }
    
    }
    

    This may be of use, here is my Identification struct.

    type Identification []struct { ID string Phone int64
    Email string }

    Essentially, I want the outside brackets, and inside those brackets I want to append multiple users. Something like this:

        [
        {"id":"A", "phone":17145555555, "email":"[email protected]"},
        {"id":"B","phone":15555555555,"email":"[email protected]"},
        {"id":"C","phone":14155555555,"email":"[email protected]"},
        {"id":"D","phone":17135555555,"email":"[email protected]"},
        {"id":"E","phone":17125555555,"email":"[email protected]"},
        {"id":"F","phone":17125555555,"email":"[email protected]"},
        {"id":"G","phone":14055555555,"email":"[email protected]"},
        {"id":"H","phone":13105555555,"email":"[email protected]"}
        ]
    
  • Rohit Panikar
    Rohit Panikar almost 7 years
    The only reason I defined my struct in my manner was so that I could iterate through it by saying: for index := range Identification. How could I iterate through your structure? The reason for iteration is to make sure I'm not duplicating the user.
  • jeevatkm
    jeevatkm almost 7 years
    You can iterate idents value.
  • Rohit Panikar
    Rohit Panikar almost 7 years
    I'm sorry, what do you mean by iterating through "idents value"?
  • jeevatkm
    jeevatkm almost 7 years
    Refer to the play.golang link in the answer added iteration too.
  • Rohit Panikar
    Rohit Panikar almost 7 years
    Appreciate the help.