* copy qson from https://github.com/joncalhoun/qson as author not want to maintain repo * latest code contains our fix to proper decode strings with escaped & symbol * replace package in api/handler/rpc Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# qson
 | 
						|
 | 
						|
This is copy from https://github.com/joncalhoun/qson
 | 
						|
As author says he is not acrivelly maintains the repo and not plan to do that.
 | 
						|
 | 
						|
## Usage
 | 
						|
 | 
						|
You can either turn a URL query param into a JSON byte array, or unmarshal that directly into a Go object.
 | 
						|
 | 
						|
Transforming the URL query param into a JSON byte array:
 | 
						|
 | 
						|
```go
 | 
						|
import "github.com/joncalhoun/qson"
 | 
						|
 | 
						|
func main() {
 | 
						|
  b, err := qson.ToJSON("bar%5Bone%5D%5Btwo%5D=2&bar[one][red]=112")
 | 
						|
  if err != nil {
 | 
						|
    panic(err)
 | 
						|
  }
 | 
						|
  fmt.Println(string(b))
 | 
						|
  // Should output: {"bar":{"one":{"red":112,"two":2}}}
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Or unmarshalling directly into a Go object using JSON struct tags:
 | 
						|
 | 
						|
```go
 | 
						|
import "github.com/joncalhoun/qson"
 | 
						|
 | 
						|
type unmarshalT struct {
 | 
						|
	A string     `json:"a"`
 | 
						|
	B unmarshalB `json:"b"`
 | 
						|
}
 | 
						|
type unmarshalB struct {
 | 
						|
	C int `json:"c"`
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
  var out unmarshalT
 | 
						|
  query := "a=xyz&b[c]=456"
 | 
						|
  err := Unmarshal(&out, query)
 | 
						|
  if err != nil {
 | 
						|
  	t.Error(err)
 | 
						|
  }
 | 
						|
  // out should equal
 | 
						|
  //   unmarshalT{
 | 
						|
	// 	  A: "xyz",
 | 
						|
	// 	  B: unmarshalB{
 | 
						|
	// 	  	C: 456,
 | 
						|
	// 	  },
 | 
						|
	//   }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
To get a query string like in the two previous examples you can use the `RawQuery` field on the [net/url.URL](https://golang.org/pkg/net/url/#URL) type.
 |