Home > Backend Development > Golang > Dynamically add elements from Go struct to JSON

Dynamically add elements from Go struct to JSON

王林
Release: 2024-02-06 10:27:03
forward
1038 people have browsed it

从 Go 结构动态添加元素到 JSON

Question content

The output format I want to get is:

{"data": [ [ 0, [ "brendan", "fraser" ] ] , [ 1, [ "keanu", "reeves" ] ] ] }
Copy after login

For this, I defined the following structure:

type actors struct {
    data [][]interface{} `json:"data"`
    }
Copy after login

The individual values ​​brendan, fraser and keanu, reeves come from another one with rec.records[0]. The data structure accessed by value format.

Right now:

rec.records[0].value will correspond to brendan

rec.records[1].value will correspond to fraser and so on.

To assign a value to this structure, I am doing:

numberofactcnt := 0
numberofcolparsed := 0
numberofcolumns := 3

var act actors
var res []actors

    for i := 0; i < 2; i++ {
        numberofactcnt = numberofactcnt + numberofcolparsed
        for j := 0; j < 1; j++ {
            act = actors{[][]interface{}{{i, []string{rec.records[numberofactcnt].value, rec.records[numberofactcnt+1].value}}}}
            re, _ := json.marshal(act)
            fmt.println(string(re))
            numberofcolparsed = numberofcolumns - 1
        }
    }
Copy after login

This gives me the output:

{"data":[[0,["brendan","fraser"]]]}
{"data":[[1,["keanu","reeves"]]]}
Copy after login

How to get the output in this format? :

{"data": [ [ 0, [ "Brendan", "Fraser" ] ] , [ 1, [ "Keanu", "Reeves" ] ] ] }
Copy after login

I think my structure is defined correctly, but how do I append the values ​​to the same json?


Correct answer


First, loop through all the records and store them in data [][]any using append in the slice, then after the loop, , marshalling the results.

numberOfActCnt := 0
numberOfColParsed := 0
numberOfColumns := 3

var res struct { Data [][]any `json:"data"` }
for i := 0; i < 2; i++ {
    numberOfActCnt = numberOfActCnt + numberOfColParsed
    for j := 0; j < 1; j++ {
        res.Data = append(res.Data, []any{i, []string{rec.records[numberOfActCnt].value, rec.records[numberOfActCnt+1].value}})
        numberOfColParsed = numberOfColumns - 1
    }
}
re, err := json.Marshal(res)
if err != nil {
    panic(err)
}
fmt.Println(string(re))
Copy after login

Note: any is an alias of interface{} since go1.18. If you are using an old version of go, you need to continue to use it. interface{}.

The above is the detailed content of Dynamically add elements from Go struct to JSON. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template