京东JavaDate类型,改为毫秒的timestamp类型兼容处理。

This commit is contained in:
gazebo
2019-11-15 15:18:29 +08:00
parent 74d40eb1fd
commit 57d00d1bc7
12 changed files with 161 additions and 32 deletions

View File

@@ -6,6 +6,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"net/http" "net/http"
"reflect"
"sort" "sort"
"strings" "strings"
@@ -411,3 +412,25 @@ func getErrMsgFromData(data map[string]interface{}) string {
} }
return msg return msg
} }
func JavaDateHook(fromType reflect.Type, toType reflect.Type, data interface{}) (interface{}, error) {
if (fromType.Kind() >= reflect.Int && fromType.Kind() <= reflect.Uint64) ||
fromType.Kind() == reflect.String {
if toType.Kind() == reflect.Ptr {
toType = toType.Elem()
}
if toType.Kind() == reflect.Struct &&
toType.Name() == "JavaDate" {
if sec := utils.Interface2Int64WithDefault(data, 0); sec > 0 {
data = utils.NewJavaDateFromTime(utils.Timestamp2Time(sec))
} else if fromType.Kind() == reflect.String {
data = utils.NewJavaDateFromTime(utils.Str2Time(data.(string)))
}
}
}
return data, nil
}
func JdMap2StructByJson(inObj interface{}, outObjAddr interface{}, weaklyTypedInput bool) (err error) {
return utils.Map2Struct(inObj, outObjAddr, true, "", JavaDateHook)
}

View File

@@ -101,3 +101,98 @@ func TestGenerateURL(t *testing.T) {
} }
defer response.Body.Close() defer response.Body.Close()
} }
func TestJdMap2StructByJson(t *testing.T) {
testStr := `
{
"stationNo": "11053496",
"stationName": "京西菜市-三平台测试门店4",
"outSystemId": "2",
"mobile": "18109051396",
"phone": "13684045765",
"lat": 34.224367,
"lng": 108.726791,
"city": 2376,
"county": 50231,
"stationAddress": "西安市长安区长安区",
"serviceTimeEnd1": 47,
"serviceTimeStart1": 1,
"closeStatus": 1,
"allowRangeOptimized": 0,
"cacheKey4StoreList": "_sn_11053496vi_82029p_2376c_2376co_50231oi_2wt_2sne_京西菜市-三平台测试门店4sa_西安市长安区长安区yn_0pe_2",
"carrierNo": 9966,
"cityName": "西安市",
"coordinate": "108.726791,34.224367",
"coordinateAddress": "韩南村",
"countyName": "长安区",
"createPin": "jd_jxcs8285",
"createTime": {
"day": 4,
"hours": 13,
"minutes": 33,
"seconds": 22,
"time": 1470893602321,
"timezoneOffset": -480,
"date": 11,
"month": 7,
"year": 116
},
"id": 123108,
"industryTag": 3,
"innerNoStatus": 1,
"isAutoOrder": 0,
"isMembership": 0,
"isNoPaper": 2,
"onlineTime": 1470893602123,
"orderAging": 60,
"orderNoticeType": 1,
"preWarehouse": 2,
"province": 2376,
"provinceName": "西安市",
"qualifyStatus": 2,
"regularFlag": 3,
"stationDeliveryStatus": 2,
"supportInvoice": 0,
"supportOfflinePurchase": 0,
"testMark": 0,
"timeAmType": 1,
"timePmType": 0,
"ts": {
"day": 2,
"hours": 16,
"minutes": 22,
"seconds": 13,
"time": 1571127733000,
"timezoneOffset": -480,
"date": 15,
"month": 9,
"year": 119
},
"updatePin": "jxadmin-zhouyang",
"updateTime": 1571127733,
"venderId": "82029",
"venderName": "测试京西菜市",
"wareType": 2,
"whiteDelivery": false,
"yn": 0
}
`
var rawData interface{}
err := utils.UnmarshalUseNumber([]byte(testStr), &rawData)
if err != nil {
t.Fatal(err)
}
var store *StoreDetail
err = JdMap2StructByJson(rawData, &store, true)
if err != nil {
t.Fatal(err)
}
if store.CreateTime.GoTime().Unix() != 1470893602 ||
store.OnlineTime.GoTime().Unix() != 1470893602 ||
store.UpdateTime.GoTime().Unix() != 1571127733 {
t.Fatalf("%d,%d,%d", store.CreateTime.GoTime().Unix(), store.OnlineTime.GoTime().Unix(), store.UpdateTime.GoTime().Unix())
}
t.Log(utils.Format4Output(store, false))
t.Log(store.CreateTime)
}

View File

@@ -399,7 +399,7 @@ func (a *API) QuerySingleOrder(orderId string) (map[string]interface{}, error) {
func (a *API) OrderQuery2(queryParam *OrderQueryParam) (retVal []*OrderInfo, totalCount int, err error) { func (a *API) OrderQuery2(queryParam *OrderQueryParam) (retVal []*OrderInfo, totalCount int, err error) {
orderList, totalCount, err := a.OrderQuery(utils.Struct2MapByJson(queryParam)) orderList, totalCount, err := a.OrderQuery(utils.Struct2MapByJson(queryParam))
if err == nil { if err == nil {
err = utils.Map2StructByJson(orderList, &retVal, true) err = JdMap2StructByJson(orderList, &retVal, true)
} }
return retVal, totalCount, err return retVal, totalCount, err
} }
@@ -506,7 +506,7 @@ func (a *API) OrderShoudSettlementService(orderId string) (map[string]interface{
func (a *API) OrderShoudSettlementService2(orderId string) (orderSettlement *OrderSettlementInfo, err error) { func (a *API) OrderShoudSettlementService2(orderId string) (orderSettlement *OrderSettlementInfo, err error) {
result, err := a.OrderShoudSettlementService(orderId) result, err := a.OrderShoudSettlementService(orderId)
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &orderSettlement, false) err = JdMap2StructByJson(result, &orderSettlement, false)
} }
return orderSettlement, err return orderSettlement, err
} }
@@ -527,7 +527,7 @@ func (a *API) GetAfsService(orderId string) (map[string]interface{}, error) {
func (a *API) GetAfsService2(afsOrderID string) (afsOrderInfo *AfsServiceResponse, err error) { func (a *API) GetAfsService2(afsOrderID string) (afsOrderInfo *AfsServiceResponse, err error) {
result, err := a.GetAfsService(afsOrderID) result, err := a.GetAfsService(afsOrderID)
if err == nil { if err == nil {
if err = utils.Map2StructByJson(result, &afsOrderInfo, false); err != nil { if err = JdMap2StructByJson(result, &afsOrderInfo, false); err != nil {
baseapi.SugarLogger.Warnf("GetAfsService2, result:%s failed with error:%v", utils.Format4Output(result, true), err) baseapi.SugarLogger.Warnf("GetAfsService2, result:%s failed with error:%v", utils.Format4Output(result, true), err)
} }
} }
@@ -703,7 +703,7 @@ func (a *API) GetByOrderNoForOaos(orderNo string) (orderTrackList []*OrderTrack,
} }
result, err := a.AccessAPINoPage("orderTrace/getByOrderNoForOaos", jdParams, nil, nil, genNoPageResultParser("code", "msg", "orderTrackList", "0")) result, err := a.AccessAPINoPage("orderTrace/getByOrderNoForOaos", jdParams, nil, nil, genNoPageResultParser("code", "msg", "orderTrackList", "0"))
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &orderTrackList, false) err = JdMap2StructByJson(result, &orderTrackList, false)
} }
return orderTrackList, err return orderTrackList, err
} }
@@ -716,7 +716,7 @@ func (a *API) GetByOrderNoForOaosNew(orderID string) (orderTrackList []*OrderTra
} }
result, err := a.AccessAPINoPage("orderTrace/getByOrderNoForOaosNew", jdParams, nil, nil, genNoPageResultParser("code", "detail", "result", "0")) result, err := a.AccessAPINoPage("orderTrace/getByOrderNoForOaosNew", jdParams, nil, nil, genNoPageResultParser("code", "detail", "result", "0"))
if err == nil { if err == nil {
err = utils.Map2StructByJson(result.(map[string]interface{})["orderTrackList"], &orderTrackList, false) err = JdMap2StructByJson(result.(map[string]interface{})["orderTrackList"], &orderTrackList, false)
} }
return orderTrackList, err return orderTrackList, err
} }

View File

@@ -89,7 +89,7 @@ func (a *API) OrderDiscountQueryActivityInfoById(activityID int64, promotionType
} }
result, err := a.AccessAPINoPage("orderdiscount/queryActivityInfoById", params, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "data", "10000")) result, err := a.AccessAPINoPage("orderdiscount/queryActivityInfoById", params, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "data", "10000"))
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &response, false) err = JdMap2StructByJson(result, &response, false)
} }
return response, err return response, err
} }
@@ -102,7 +102,7 @@ func (a *API) QueryPromotionInfo(promotionInfoId int64) (promotionInfo *Promotio
} }
result, err := a.AccessAPINoPage("singlePromote/queryPromotionInfo", jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "data", "0")) result, err := a.AccessAPINoPage("singlePromote/queryPromotionInfo", jdParams, nil, nil, genNoPageResultParser("errorCode", "errorInfos", "data", "0"))
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &promotionInfo, false) err = JdMap2StructByJson(result, &promotionInfo, false)
} }
return promotionInfo, err return promotionInfo, err
} }
@@ -117,7 +117,7 @@ func (a *API) QueryPromotionSku(promotionType int, skuID int64, promotionState i
} }
result, _, err := a.AccessAPIHavePage("singlePromote/queryPromotionSku", jdParams, nil, nil, genNormalHavePageResultParser("data")) result, _, err := a.AccessAPIHavePage("singlePromote/queryPromotionSku", jdParams, nil, nil, genNormalHavePageResultParser("data"))
if err != nil { if err != nil {
err = utils.Map2StructByJson(result, &skuResultList, false) err = JdMap2StructByJson(result, &skuResultList, false)
} }
return skuResultList, err return skuResultList, err
} }

View File

@@ -125,7 +125,7 @@ func (a *API) OrderDiscountQuerySubmitActivityResult(activityID int64) (response
"traceId": utils.GetUUID(), "traceId": utils.GetUUID(),
}, nil, nil, genNoPageResultParser("code", "detail", "result", "0")) }, nil, nil, genNoPageResultParser("code", "detail", "result", "0"))
if err == nil { if err == nil {
err = utils.Map2StructByJson(result.([]interface{})[0], &response, true) // todo只取第一个 err = JdMap2StructByJson(result.([]interface{})[0], &response, true) // todo只取第一个
} }
return response, err return response, err
} }
@@ -141,7 +141,7 @@ func (a *API) OrderDiscountQueryActivityInfo(activityID int64) (response *Activi
"version": "", "version": "",
}, nil, nil, genNoPageResultParser("code", "detail", "result", "0")) }, nil, nil, genNoPageResultParser("code", "detail", "result", "0"))
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &response, true) err = JdMap2StructByJson(result, &response, true)
} }
return response, err return response, err
} }

View File

@@ -191,7 +191,7 @@ func (a *API) createPromotionSku(promotionType int, infoId int64, outInfoId stri
// todo 当前是在出错时把data中的数据当成错误信息处理的 // todo 当前是在出错时把data中的数据当成错误信息处理的
result, err := a.AccessAPINoPage(getPromotionCmd("createPromotionSku", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "data", "", "0")) result, err := a.AccessAPINoPage(getPromotionCmd("createPromotionSku", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "data", "", "0"))
if err == nil && result != nil { if err == nil && result != nil {
err = utils.Map2StructByJson(result, &skusResult, false) err = JdMap2StructByJson(result, &skusResult, false)
} }
return skusResult, err return skusResult, err
} }
@@ -227,7 +227,7 @@ func (a *API) adjustPromotionSku(promotionType int, infoId int64, outInfoId stri
jdParams["skus"] = skus jdParams["skus"] = skus
result, err := a.AccessAPINoPage(getPromotionCmd("adjustPromotionSku", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "data", "", "0")) result, err := a.AccessAPINoPage(getPromotionCmd("adjustPromotionSku", promotionType), jdParams, nil, nil, genNoPageResultParser("errorCode", "data", "", "0"))
if err == nil && result != nil { if err == nil && result != nil {
err = utils.Map2StructByJson(result, &skusResult, false) err = JdMap2StructByJson(result, &skusResult, false)
} }
return skusResult, err return skusResult, err
} }

View File

@@ -383,7 +383,7 @@ func (a *API) QuerySkuInfos(queryParam *QuerySkuParam) (skuList []*SkuMain, tota
} }
result, totalCount, err := a.AccessAPIHavePage("pms/querySkuInfos", utils.Struct2MapByJson(queryParam), nil, nil, nil) result, totalCount, err := a.AccessAPIHavePage("pms/querySkuInfos", utils.Struct2MapByJson(queryParam), nil, nil, nil)
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &skuList, false) err = JdMap2StructByJson(result, &skuList, false)
} }
return skuList, totalCount, err return skuList, totalCount, err
} }
@@ -393,7 +393,7 @@ func (a *API) QuerySkuInfos(queryParam *QuerySkuParam) (skuList []*SkuMain, tota
func (a *API) QueryListBySkuIds(queryParam *QueryListBySkuIdsParam) (imgList []*ImgHandleQueryResult, err error) { func (a *API) QueryListBySkuIds(queryParam *QueryListBySkuIdsParam) (imgList []*ImgHandleQueryResult, err error) {
result, err := a.AccessAPINoPage("order/queryListBySkuIds", utils.Struct2MapByJson(queryParam), nil, nil, nil) result, err := a.AccessAPINoPage("order/queryListBySkuIds", utils.Struct2MapByJson(queryParam), nil, nil, nil)
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &imgList, false) err = JdMap2StructByJson(result, &imgList, false)
} }
return imgList, err return imgList, err
} }

View File

@@ -259,7 +259,7 @@ type UpdateStoreFreightParam struct {
func (a *API) GetAllCities() (cities []*CityInfo, err error) { func (a *API) GetAllCities() (cities []*CityInfo, err error) {
result, err := a.AccessAPINoPage("address/allcities", nil, nil, nil, genNoPageResultParser("code", "msg", "result", "0")) result, err := a.AccessAPINoPage("address/allcities", nil, nil, nil, genNoPageResultParser("code", "msg", "result", "0"))
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &cities, false) err = JdMap2StructByJson(result, &cities, false)
} }
return cities, err return cities, err
} }
@@ -311,7 +311,7 @@ func (a *API) CreateStore(createParams *OpStoreParams) (*CreateShopResult, error
func (a *API) GetStoreInfoByStationNo2(storeNo string) (storeDetail *StoreDetail, err error) { func (a *API) GetStoreInfoByStationNo2(storeNo string) (storeDetail *StoreDetail, err error) {
result, err := a.AccessAPINoPage("storeapi/getStoreInfoByStationNo", utils.Params2Map("StoreNo", storeNo), nil, nil, nil) result, err := a.AccessAPINoPage("storeapi/getStoreInfoByStationNo", utils.Params2Map("StoreNo", storeNo), nil, nil, nil)
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &storeDetail, false) err = JdMap2StructByJson(result, &storeDetail, false)
} }
return storeDetail, err return storeDetail, err
} }
@@ -357,7 +357,7 @@ func (a *API) GetCommentByOrderId2(orderId int64) (orderComment *OrderCommentInf
} }
result, err := a.AccessAPINoPage("commentOutApi/getCommentByOrderId", jdParams, nil, nil, genNoPageResultParser("code", "msg", "result", "200")) result, err := a.AccessAPINoPage("commentOutApi/getCommentByOrderId", jdParams, nil, nil, genNoPageResultParser("code", "msg", "result", "200"))
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &orderComment, false) err = JdMap2StructByJson(result, &orderComment, false)
} }
return orderComment, err return orderComment, err
} }
@@ -413,7 +413,7 @@ func (a *API) GetDeliveryRangeByStationNo2(stationNo string) (deliveryRange *Sto
} }
result, err := a.AccessAPINoPage("store/getDeliveryRangeByStationNo", jdParams, nil, nil, nil) result, err := a.AccessAPINoPage("store/getDeliveryRangeByStationNo", jdParams, nil, nil, nil)
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &deliveryRange, false) err = JdMap2StructByJson(result, &deliveryRange, false)
} }
return deliveryRange, err return deliveryRange, err
} }

View File

@@ -389,7 +389,7 @@ func (a *API) GetSkuPageInfo(skuId int64) (skuPageInfo *PageSku, err error) {
result, err := a.AccessStorePage("https://daojia.jd.com/client", params, false) result, err := a.AccessStorePage("https://daojia.jd.com/client", params, false)
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &skuPageInfo, false) err = JdMap2StructByJson(result, &skuPageInfo, false)
} }
return skuPageInfo, err return skuPageInfo, err
} }
@@ -419,7 +419,7 @@ func (a *API) GetStoreInfo(storeId string) (storeInfo map[string]interface{}, er
func (a *API) GetStoreInfo2(storeID string) (storeInfo *PageShopInfo, err error) { func (a *API) GetStoreInfo2(storeID string) (storeInfo *PageShopInfo, err error) {
retVal, err := a.GetStoreInfo(storeID) retVal, err := a.GetStoreInfo(storeID)
if err == nil { if err == nil {
err = utils.Map2StructByJson(retVal, &storeInfo, false) err = JdMap2StructByJson(retVal, &storeInfo, false)
} }
return storeInfo, err return storeInfo, err
} }
@@ -461,7 +461,7 @@ func (a *API) GetCorporationInfo(stationNo, qualifyNumber string) (corporatonInf
"qualifyNumber": qualifyNumber, "qualifyNumber": qualifyNumber,
}, true) }, true)
if err == nil { if err == nil {
err = utils.Map2StructByJson(result, &corporatonInfo, false) err = JdMap2StructByJson(result, &corporatonInfo, false)
} }
return corporatonInfo, err return corporatonInfo, err
} }

View File

@@ -144,14 +144,14 @@ func (a *API) GetStationInfoList(stationNo string, skuIds []int64) (priceInfo []
} }
result, err := a.AccessAPINoPage("price/getStationInfoList", jdParams, nil, nil, genNoPageResultParser("code", "detail", "result", "0")) result, err := a.AccessAPINoPage("price/getStationInfoList", jdParams, nil, nil, genNoPageResultParser("code", "detail", "result", "0"))
if err == nil && result != nil { if err == nil && result != nil {
err = utils.Map2StructByJson(result, &priceInfo, false) err = JdMap2StructByJson(result, &priceInfo, false)
} }
return priceInfo, err return priceInfo, err
} }
func (a *API) handleBatchOpResult(outStationNo, stationNo string, batchCount int, inErr error, result interface{}, tagName string) (responseList []*StoreSkuBatchUpdateResponse, err error) { func (a *API) handleBatchOpResult(outStationNo, stationNo string, batchCount int, inErr error, result interface{}, tagName string) (responseList []*StoreSkuBatchUpdateResponse, err error) {
if result != nil { if result != nil {
if err = utils.Map2Struct(result, &responseList, true, tagName); err == nil { if err = utils.Map2Struct(result, &responseList, true, tagName, JavaDateHook); err == nil {
var failedList []*StoreSkuBatchUpdateResponse var failedList []*StoreSkuBatchUpdateResponse
for _, v := range responseList { for _, v := range responseList {
if v.Code != 0 { if v.Code != 0 {
@@ -287,7 +287,7 @@ func (a *API) QueryOpenUseable(listBaseStockCenterRequest []*BaseStockCenterRequ
} }
result, err := a.AccessAPINoPage("stock/queryOpenUseable", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0")) result, err := a.AccessAPINoPage("stock/queryOpenUseable", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0"))
if err == nil && result != nil { if err == nil && result != nil {
err = utils.Map2StructByJson(result, &stockResponse, false) err = JdMap2StructByJson(result, &stockResponse, false)
} }
return stockResponse, err return stockResponse, err
} }
@@ -302,7 +302,7 @@ func (a *API) QueryStockCenter(outStationNo string, skuIds []*SkuIdEntity, userP
} }
result, err := a.AccessAPINoPage("stock/queryStockCenter", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0")) result, err := a.AccessAPINoPage("stock/queryStockCenter", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0"))
if err == nil && result != nil { if err == nil && result != nil {
err = utils.Map2StructByJson(result, &vendibilityResponse, false) err = JdMap2StructByJson(result, &vendibilityResponse, false)
} }
return vendibilityResponse, err return vendibilityResponse, err
} }

View File

@@ -45,3 +45,7 @@ func (j *JavaDate) GoTime() time.Time {
} }
return Timestamp2Time(j.Time / 1000) return Timestamp2Time(j.Time / 1000)
} }
func (j *JavaDate) String() string {
return Timestamp2Str(j.Time)
}

View File

@@ -17,6 +17,8 @@ import (
"github.com/gazeboxu/structs" "github.com/gazeboxu/structs"
) )
const MaxTimeSecond = 9573800254 // 正常最大的秒数
var ( var (
DefaultTimeValue = Str2Time("1970-01-01 00:00:00") DefaultTimeValue = Str2Time("1970-01-01 00:00:00")
ZeroTimeValue = time.Time{} ZeroTimeValue = time.Time{}
@@ -277,13 +279,14 @@ func Timestamp2Str(timestamp int64) string {
return Time2Str(Timestamp2Time(timestamp)) return Time2Str(Timestamp2Time(timestamp))
} }
// timestamp为秒或毫秒
func Timestamp2Time(timestamp int64) time.Time { func Timestamp2Time(timestamp int64) time.Time {
const normalTimestamp = 1533709322 nsec := int64(0)
if timestamp > normalTimestamp*100 { // 传成毫秒了 if timestamp > MaxTimeSecond { // 传成毫秒了
baseapi.SugarLogger.Errorf("Timestamp2Time wrong timestamp:%d", timestamp) nsec = (timestamp % 1000) * 1000000
timestamp = timestamp / 1000 timestamp /= 1000
} }
return time.Unix(timestamp, 0) return time.Unix(timestamp, nsec)
} }
func Time2Str(t time.Time) string { func Time2Str(t time.Time) string {
@@ -472,20 +475,24 @@ func Struct2FlatMap(obj interface{}) map[string]interface{} {
} }
// !!! 此函数好像不支持struct是内嵌结构的 // !!! 此函数好像不支持struct是内嵌结构的
func Map2Struct(inObj interface{}, outObjAddr interface{}, weaklyTypedInput bool, tagName string) (err error) { func Map2Struct(inObj interface{}, outObjAddr interface{}, weaklyTypedInput bool, tagName string, decodeHook interface{}) (err error) {
if tagName == "" { if tagName == "" {
tagName = "json" tagName = "json"
} }
if !weaklyTypedInput {
weaklyTypedInput = decodeHook != nil
}
decoder, _ := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ decoder, _ := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
TagName: tagName, TagName: tagName,
Result: outObjAddr, Result: outObjAddr,
WeaklyTypedInput: weaklyTypedInput, WeaklyTypedInput: weaklyTypedInput,
DecodeHook: decodeHook,
}) })
return decoder.Decode(inObj) return decoder.Decode(inObj)
} }
func Map2StructByJson(inObj interface{}, outObjAddr interface{}, weaklyTypedInput bool) (err error) { func Map2StructByJson(inObj interface{}, outObjAddr interface{}, weaklyTypedInput bool) (err error) {
return Map2Struct(inObj, outObjAddr, weaklyTypedInput, "") return Map2Struct(inObj, outObjAddr, weaklyTypedInput, "", nil)
} }
func Int64Slice2String(intList []int64) (outList []string) { func Int64Slice2String(intList []int64) (outList []string) {