func FromJSONSlice(jsonString string) ([]Map, error) {
	var slice []Map
	err := json.Unmarshal([]byte(jsonString), &slice)
	if err != nil {
		return nil, err
	}
	return slice, nil
}
FromJSONSlice creates a new slice of Map containing the data specified in the
jsonString. Works with jsons with a top level array

Returns an error if the JSON is invalid.
package objx
import (
	"encoding/base64"
	"encoding/json"
	"errors"
	"io/ioutil"
	"net/url"
	"strings"
)
type MSIConvertable interface {
	MSI() map[string]interface{}
}
type Map map[string]interface{}
func (m Map) Value() *Value {
	return &Value{data: m}
}
var Nil = New(nil)
func New(data interface{}) Map {
	if _, ok := data.(map[string]interface{}); !ok {
		if converter, ok := data.(MSIConvertable); ok {
			data = converter.MSI()
		} else {
			return nil
		}
	}
	return Map(data.(map[string]interface{}))
}
func MSI(keyAndValuePairs ...interface{}) Map {
	newMap := Map{}
	keyAndValuePairsLen := len(keyAndValuePairs)
	if keyAndValuePairsLen%2 != 0 {
		return nil
	}
	for i := 0; i < keyAndValuePairsLen; i = i + 2 {
		key := keyAndValuePairs[i]
		value := keyAndValuePairs[i+1]
		keyString, keyStringOK := key.(string)
		if !keyStringOK {
			return nil
		}
		newMap[keyString] = value
	}
	return newMap
}
func MustFromJSON(jsonString string) Map {
	o, err := FromJSON(jsonString)
	if err != nil {
		panic("objx: MustFromJSON failed with error: " + err.Error())
	}
	return o
}
func MustFromJSONSlice(jsonString string) []Map {
	slice, err := FromJSONSlice(jsonString)
	if err != nil {
		panic("objx: MustFromJSONSlice failed with error: " + err.Error())
	}
	return slice
}
func FromJSON(jsonString string) (Map, error) {
	var m Map
	err := json.Unmarshal([]byte(jsonString), &m)
	if err != nil {
		return Nil, err
	}
	return m, nil
}