登录
首页 >  Golang >  Go问答

在 JSON 中进行求和操作

来源:stackoverflow

时间:2024-02-10 08:48:24 290浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《在 JSON 中进行求和操作》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我想要实现的目标

我正在用 go 解析 iam 策略。在 iam 策略中,大多数字段可以是字符串或字符串数​​组。很难想象我脑子里的这些决策树我想要的是一种详尽的模式匹配。

我做了什么

我使用 json.unmarshal 定义了一个策略

type policy struct {
    version    string      `json:"version"`
    id         string      `json:"id,omitempty"`
    statements []statement `json:"statement"`
}

type statement struct {
    // ...
    action        interface{}         `json:"action"`              // string or array
    // ...
}

并迭代语句。

switch ele := st.Action.(type) {
case string:
    action, _ := expandAction(ele, data)
    actions = append(actions, action...)
    setter(i, actions)
case []string:
    for _, a := range ele {
        if strings.Contains(a, "*") {
            exps, _ := expandAction(a, data)
            actions = append(actions, exps...)
        } else {
            actions = append(actions, a)
        }
        setter(i, actions)
        fmt.Println(actions)
    }
default:
    // interface{}
}

问题

它总是转到 default 情况。

可以使用反射,但我不认为我真的应该这样做,因为运行时可以在调用 json.unnarshal 时知道类型。


正确答案


official document 可以看出,JSON数组的类型是[]interface。如果将 []string 更新为 []interface,则可以运行相关的 case 块。但是,如果您必须确定这是字符串数组,反射可以提供它。

以上就是《在 JSON 中进行求和操作》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>