Один из недостатков демаршалирования JSON на карту заключается в том, что он уходит только на 1 уровень глубины: то есть, если вы вложили JSON, он будет демонтировать только первый уровень вашей структуры данных. Это означает, что вам нужно не только выполнять итерации по карте results
, но и создавать любой тип данных, необходимый для &StructData{}
. Это будет выглядеть примерно так:
package main
import (
"encoding/json"
"fmt"
)
type StructData struct {
Data []string `json:"data"`
}
func main() {
empArray := "[{\"abc\":\"abc\"},{\"def\":\"def\"}]"
var results []map[string]interface{}
json.Unmarshal([]byte(empArray), &results)
// create a new variable that we'll use as the input to StructData{}
var unpacked []string
// iterate through our results map to get the 'next level' of our JSON
for _, i := range results {
// marshal our next level as []byte
stringified, err := json.Marshal(i)
if err != nil {
fmt.Println("error :", err)
}
// add item to our unpacked variable as a string
unpacked = append(unpacked, string(stringified[:]))
}
pr := &StructData{unpacked}
prAsBytes, err := json.Marshal(pr)
if err != nil {
fmt.Println("error :", err)
}
fmt.Println(string(prAsBytes[:]))
}