Documentation ¶
Overview ¶
Package qson implmenets decoding of URL query params into JSON and Go values (using JSON struct tags).
See https://golang.org/pkg/encoding/json/ for more details on JSON struct tags.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidParam is returned when invalid data is provided to the ToJSON or Unmarshal function. // Specifically, this will be returned when there is no equals sign present in the URL query parameter. ErrInvalidParam error = errors.New("qson: invalid url query param provided") )
Functions ¶
func ToJSON ¶
ToJSON will turn a query string like:
cat=1&bar%5Bone%5D%5Btwo%5D=2&bar[one][red]=112
Into a JSON object with all the data merged as nicely as possible. Eg the example above would output:
{"bar":{"one":{"two":2,"red":112}}}
Example ¶
b, err := ToJSON("a=xyz&b[c]=456") if err != nil { panic(err) } vine / service / apif(string(b))
Output: {"a":"xyz","b":{"c":456}}
func Unmarshal ¶
Unmarshal will take a dest along with URL query params and attempt to first turn the query params into JSON and then unmarshal those into the dest variable
BUG(joncalhoun): If a URL query param value is something like 123 but is expected to be parsed into a string this will currently result in an error because the JSON transformation will assume this is intended to be an int. This should only affect the Unmarshal function and could likely be fixed, but someone will need to submit a PR if they want that fixed.
Example ¶
type Ex struct { A string `json:"a"` B struct { C int `json:"c"` } `json:"b"` } var ex Ex if err := Unmarshal(&ex, "a=xyz&b[c]=456"); err != nil { panic(err) } vine / service / apif("%+v\n", ex)
Output: {A:xyz B:{C:456}}
Types ¶
This section is empty.
Notes ¶
Bugs ¶
If a URL query param value is something like 123 but is expected to be parsed into a string this will currently result in an error because the JSON transformation will assume this is intended to be an int. This should only affect the Unmarshal function and could likely be fixed, but someone will need to submit a PR if they want that fixed.