45 lines
841 B
Go
45 lines
841 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type Timestamp time.Time
|
||
|
|
||
|
func (t *Timestamp) UnmarshalJSON(b []byte) error {
|
||
|
v, err := time.Parse(time.RubyDate, string(b[1:len(b)-1]))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
*t = Timestamp(v)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// start with a string representation of our JSON data
|
||
|
var input = `
|
||
|
{
|
||
|
"created_at": "Thu May 31 00:00:01 +0000 2012"
|
||
|
}
|
||
|
`
|
||
|
|
||
|
func main() {
|
||
|
// our target will be of type map[string]interface{}, which is a
|
||
|
// pretty generic type that will give us a hashtable whose keys
|
||
|
// are strings, and whose values are of type interface{}
|
||
|
var val map[string]Timestamp
|
||
|
|
||
|
if err := json.Unmarshal([]byte(input), &val); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
fmt.Println(val)
|
||
|
for k, v := range val {
|
||
|
fmt.Println(k, reflect.TypeOf(v))
|
||
|
}
|
||
|
|
||
|
fmt.Println(time.Time(val["created_at"]))
|
||
|
}
|