func (t *SourceTransaction) UnmarshalJSON(data []byte) error {
	type sourceTransaction SourceTransaction
	var st sourceTransaction
	err := json.Unmarshal(data, &st)
	if err != nil {
		return err
	}
	*t = SourceTransaction(st)
	var raw map[string]interface{}
	err = json.Unmarshal(data, &raw)
	if err != nil {
		return err
	}
	if d, ok := raw[t.Type]; ok {
		if m, ok := d.(map[string]interface{}); ok {
			t.TypeData = m
		}
	}
	return nil
}
UnmarshalJSON handles deserialization of a SourceTransaction. This custom
unmarshaling is needed to extract the type specific data (accessible under
`TypeData`) but stored in JSON under a hash named after the `type` of the
source transaction.
package stripe
import "encoding/json"
type SourceTransactionListParams struct {
	ListParams `form:"*"`
	Source     string `form:"-"`  
}
type SourceTransactionList struct {
	ListMeta
	Values []*SourceTransaction `json:"data"`
}
type SourceTransaction struct {
	Amount       int64    `json:"amount"`
	Created      int64    `json:"created"`
	Currency     Currency `json:"currency"`
	CustomerData string   `json:"customer_data"`
	ID           string   `json:"id"`
	Live         bool     `json:"livemode"`
	Source       string   `json:"source"`
	Type         string   `json:"type"`
	TypeData     map[string]interface{}
}