func (c *C) ParseJSON(v interface{}) {
	defer c.Request.Body.Close()
	c.Panic(json.NewDecoder(c.Request.Body).Decode(v))
}
ParseJSON decode json to interface{}
package ace
import (
	"encoding/json"
	"fmt"
	"github.com/julienschmidt/httprouter"
	"github.com/plimble/sessions"
	"math"
	"net/http"
	"strconv"
	"strings"
	"time"
)
const (
	contentType    = "Content-Type"
	acceptLanguage = "Accept-Language"
	abortIndex     = math.MaxInt8 / 2
)
type C struct {
	writercache responseWriter
	params      httprouter.Params
	Request     *http.Request
	Writer      ResponseWriter
	index       int8
	handlers    []HandlerFunc
	data        map[string]interface{}
	sessions    *sessions.Sessions
	render      Renderer
}
func (a *Ace) createContext(w http.ResponseWriter, r *http.Request) *C {
	c := a.pool.Get().(*C)
	c.writercache.reset(w)
	c.Request = r
	c.index = -1
	c.data = nil
	c.render = a.render
	return c
}
func (c *C) JSON(status int, v interface{}) {
	c.Writer.Header().Set(contentType, "application/json; charset=UTF-8")
	c.Writer.WriteHeader(status)
	if v == nil {
		return
	}
	buf := bufPool.Get()
	defer bufPool.Put(buf)
	if err := json.NewEncoder(buf).Encode(v); err != nil {
		panic(err)
	}
	c.Writer.Write(buf.Bytes())
}
func (c *C) String(status int, format string, val ...interface{}) {
	c.Writer.Header().Set(contentType, "text/html; charset=UTF-8")
	c.Writer.WriteHeader(status)
	buf := bufPool.Get()
	defer bufPool.Put(buf)
	if len(val) == 0 {
		buf.WriteString(format)
	} else {
		buf.WriteString(fmt.Sprintf(format, val...))
	}
	c.Writer.Write(buf.Bytes())
}
func (c *C) Download(status int, v []byte) {
	c.Writer.Header().Set(contentType, "application/octet-stream; charset=UTF-8")
	c.Writer.WriteHeader(status)
	c.Writer.Write(v)
}
func (c *C) HTML(name string, data interface{}) {
	c.render.Render(c.Writer, name, data)
}
func (c *C) Param(name string) string {
	return c.params.ByName(name)
}