Skip to content

Instantly share code, notes, and snippets.

@rumblefrog
Created January 22, 2019 21:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rumblefrog/d7b18d054d0acd45acf6caae9823aa51 to your computer and use it in GitHub Desktop.
Save rumblefrog/d7b18d054d0acd45acf6caae9823aa51 to your computer and use it in GitHub Desktop.
func dynamicUnmarshal(text string) ([][]interface{}, error) {
var data [][]json.RawMessage
if err := json.Unmarshal(text, &data); err != nil {
return nil, err
}
result := make([][]interface{}, len(data))
for i, _ := range result {
result[i] = make([]interface{}, len(data[i]))
}
for i, first := range data {
for j, rawEntry := range first {
var typeStruct struct {
Type string `json:"type"`
}
if err := json.Unmarshal(rawEntry, &typeStruct); err != nil {
return nil, err
}
switch typeStruct.Type {
case "test":
var decodeTo StructOne
if err := json.Unmarshal(rawEntry, &decodeTo); err != nil {
return nil, err
}
result[i][j] = decodeTo
default:
return nil, errors.New("unsupported type")
}
}
}
return result, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment