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

在 map[string]interface{} 的值上输入 switch to

在 map[string]interface{} 的值上输入 switch to

Go
慕雪6442864 2023-07-10 15:05:21
问题我面临着从 json 对象中删除不需要的数组的问题,例如。仅包含一个元素的数组,该元素不是对象或数组。(没有数组作为输入的根)例子在:{"name": [{ "inner": ["test"] }]}通缉:{"name": [{ "inner": "test" }]}方法我从对 a 的值进行简单的类型切换开始map[string]interface{},并认识到它不会切换到 case []map[string]interface{}。(给出例子)这是我想出的实现。它适用于大多数场景,但不适用于数组中的内部对象。type jsonMap map[string]interface{}type jsonMapList []map[string]interface{}m := jsonMap{}err := json.Unmarshal(s, &m)if err != nil {    panic(err)}res := removeFromObject(m)bytes, err := json.Marshal(res)if err != nil {    panic(err)}result := string(bytes)log.Infof("Parse Result: %s", result)func removeFromObject(in jsonMap) jsonMap {    res := jsonMap{}    for k, v := range in {        switch value := v.(type) {        case jsonMap:            res[k] = removeFromObject(value)        case jsonMapList:            list := []jsonMap{}            for _, entry := range value {                list = append(list, removeFromObject(entry))            }            res[k] = list        case []interface{}:            if len(value) == 1 {                res[k] = value[0]            } else {                res[k] = value            }        default:            res[k] = value        }    }    return res}问题如何将大小写切换为对象数组,以便我也可以递归解析该数组中的对象?
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

您可以使用此函数删除不需要的数组。


func removearr(x interface{}) interface{} {

    switch val := x.(type) {

    case map[string]interface{}:

        for k, v := range val {

            val[k] = removearr(v)

        }

        return val

    case []interface{}:

        if len(val) == 1 {

            // remove array only if the value is not an object

            if _, ok := val[0].(map[string]interface{}); !ok {

                return removearr(val[0])

            }

        }


        for i, v := range val {

            val[i] = removearr(v)

        }

        return val

    default:

        return x

    }

}

https://play.golang.com/p/mwo7Y2rJ_lc


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

添加回答

举报

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