47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package json
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
|
|
cur "git.loafle.net/commons_go/util/reflect"
|
|
jsoniter "github.com/json-iterator/go"
|
|
)
|
|
|
|
func convertParamsToStringArray(params []interface{}) ([]string, error) {
|
|
var values []string
|
|
if nil == params || 0 == len(params) {
|
|
return values, nil
|
|
}
|
|
|
|
for i, param := range params {
|
|
t := reflect.TypeOf(param)
|
|
switch t.Kind() {
|
|
case reflect.String:
|
|
values = append(values, param.(string))
|
|
case reflect.Array, reflect.Slice, reflect.Map, reflect.Struct:
|
|
b, err := jsoniter.Marshal(param)
|
|
if nil != err {
|
|
return nil, err
|
|
}
|
|
values = append(values, string(b))
|
|
case reflect.Ptr:
|
|
if t.Elem().Kind() != reflect.Struct {
|
|
return nil, fmt.Errorf("Pointer of param[%d] is permitted only Struct type", i)
|
|
}
|
|
b, err := jsoniter.Marshal(param)
|
|
if nil != err {
|
|
return nil, err
|
|
}
|
|
values = append(values, string(b))
|
|
default:
|
|
s, err := cur.ConvertToString(param)
|
|
if nil != err {
|
|
return nil, fmt.Errorf("String conversion of param[%d] has been failed [%v]", i, err)
|
|
}
|
|
values = append(values, s)
|
|
}
|
|
}
|
|
return values, nil
|
|
}
|