diff options
-rw-r--r-- | skate/go.mod | 1 | ||||
-rw-r--r-- | skate/go.sum | 6 | ||||
-rw-r--r-- | skate/map.go | 35 |
3 files changed, 11 insertions, 31 deletions
diff --git a/skate/go.mod b/skate/go.mod index bd2093a..49ef5d2 100644 --- a/skate/go.mod +++ b/skate/go.mod @@ -9,5 +9,6 @@ require ( github.com/miku/parallel v0.0.0-20210205190127-d1fa15dcea0c github.com/nsf/jsondiff v0.0.0-20210303162244-6ea32392771e github.com/segmentio/encoding v0.2.17 + github.com/tidwall/gjson v1.7.5 golang.org/x/text v0.3.5 ) diff --git a/skate/go.sum b/skate/go.sum index 61baedb..a186bcd 100644 --- a/skate/go.sum +++ b/skate/go.sum @@ -12,6 +12,12 @@ github.com/nsf/jsondiff v0.0.0-20210303162244-6ea32392771e h1:S+/ptYdZtpK/MDstwC github.com/nsf/jsondiff v0.0.0-20210303162244-6ea32392771e/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= github.com/segmentio/encoding v0.2.17 h1:cgfmPc44u1po1lz5bSgF00gLCROBjDNc7h+H7I20zpc= github.com/segmentio/encoding v0.2.17/go.mod h1:7E68jTSWMnNoYhHi1JbLd7NBSB6XfE4vzqhR88hDBQc= +github.com/tidwall/gjson v1.7.5 h1:zmAN/xmX7OtpAkv4Ovfso60r/BiCi5IErCDYGNJu+uc= +github.com/tidwall/gjson v1.7.5/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= +github.com/tidwall/match v1.0.3 h1:FQUVvBImDutD8wJLN6c5eMzWtjgONK9MwIBCOrUJKeE= +github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.1.0 h1:K3hMW5epkdAVwibsQEfR/7Zj0Qgt4DxtNumTq/VloO8= +github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/skate/map.go b/skate/map.go index 5584371..9d3c98d 100644 --- a/skate/map.go +++ b/skate/map.go @@ -5,10 +5,10 @@ import ( "errors" "reflect" "runtime" - "strconv" "strings" json "github.com/segmentio/encoding/json" + "github.com/tidwall/gjson" ) var ( @@ -47,7 +47,7 @@ func (f Mapper) AsTSV(p []byte) ([]byte, error) { if err != nil { return nil, err } - return append(bytes.Join(fields, bTab), bNewline...), nil + return bytes.Join(fields, bTab), nil } // WithPrefix adds a given prefix to the first element. @@ -84,36 +84,9 @@ func Identity(p []byte) ([][]byte, error) { // CreateFixedMapper extract the value from a given fixed top level json key. // Returns a function that maps doc to (v, doc). func CreateFixedMapper(field string) Mapper { - if field == "" { - return func(p []byte) ([][]byte, error) { - return nil, ErrMissingFieldName - } - } f := func(p []byte) ([][]byte, error) { - var ( - doc map[string]interface{} - v interface{} - ok bool - key []byte - ) - if err := json.Unmarshal(p, &doc); err != nil { - return nil, err - } - if v, ok = doc[field]; !ok { - return nil, nil - } - switch w := v.(type) { - case string: - key = []byte(w) - case int: - key = []byte(strconv.Itoa(w)) - case int64: - key = []byte(strconv.Itoa(int(w))) - case float64: - key = []byte(strconv.FormatFloat(w, 'f', 52, 64)) - default: - return nil, nil - } + result := gjson.GetBytes(p, field) + key := []byte(result.String()) return [][]byte{key, p}, nil } return f |