Guest User

Untitled

a guest
Jan 23rd, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.78 KB | None | 0 0
  1. func dynamicUnmarshal(text string) ([][]interface{}, error) {
  2. var data [][]json.RawMessage
  3.  
  4. if err := json.Unmarshal(text, &data); err != nil {
  5. return nil, err
  6. }
  7.  
  8. result := make([][]interface{}, len(data))
  9. for i, _ := range result {
  10. result[i] = make([]interface{}, len(data[i]))
  11. }
  12.  
  13. for i, first := range data {
  14. for j, rawEntry := range first {
  15. var typeStruct struct {
  16. Type string `json:"type"`
  17. }
  18.  
  19. if err := json.Unmarshal(rawEntry, &typeStruct); err != nil {
  20. return nil, err
  21. }
  22.  
  23. switch typeStruct.Type {
  24. case "test":
  25. var decodeTo StructOne
  26. if err := json.Unmarshal(rawEntry, &decodeTo); err != nil {
  27. return nil, err
  28. }
  29.  
  30. result[i][j] = decodeTo
  31. default:
  32. return nil, errors.New("unsupported type")
  33. }
  34. }
  35. }
  36.  
  37. return result, nil
  38. }
Add Comment
Please, Sign In to add comment