为了账号安全,请及时绑定邮箱和手机立即绑定

处理不同类型的请求正文

处理不同类型的请求正文

Go
翻阅古今 2023-07-31 17:13:20
假设后端应用程序有这样的请求。正如您所看到的,这是一个对象数组。[    {        "section_id": "8ad1f7cc-a510-48ee-b4fa-bedbee444a84", // (uuid - string)        "section_name": "First section"    },    {        "section_id": 1556895, // (int)        "section_name": "Second section"    }]我想解析这个数组。根据部分 ID 类型,应用程序需要执行不同的操作。如何绕过严格输入?requestBody, err := ioutil.ReadAll(request.Body)if err = json.Unmarshal([]byte(requestBody), &sections); err != nil {    println(err)}for _, section := range sections {    if reflect.TypeOf(section.ID) == string {        // block 1    } reflect.TypeOf(section.ID) == int {        // block 2    }}
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

你可以尝试用这个:


type section struct {

    ID interface{} `json:"section_id"`

    Name string `json:"section_name"`

}


dec := json.NewDecoder(requestBody)

dec.UseNumber()

var sections []section

if err := dec.Decode([]byte(request.Body), &sections); err != nil {

    println(err)

}


for _, section := range sections {

    if reflect.TypeOf(section.ID).String() == "string" {

        // block 1

    } reflect.TypeOf(section.ID).String() == "json.Number" {

        n := section.ID.Int64()

        // block 2

    }

}



查看完整回答
反对 回复 2023-07-31
?
慕仙森

TA贡献1827条经验 获得超7个赞

有几种方法可以做到这一点:


type Section struct {

   ID interface{} `json:"section_id"`

   SectionName string `json:"section_name"

}


for _, section := range sections {

   if str,ok:=section.ID.(string); ok {

   } else if number, ok:=section.ID.(float64); ok {

   }

}

或者:


type Section struct {

   ID json.RawMessage `json:"section_id"`

   SectionName string `json:"section_name"

}


for _, section := range sections {

   if value, err:=strconv.Atoi(string(section.ID)); err==nil {


   } else {

   }

}


查看完整回答
反对 回复 2023-07-31
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信