我有2个JSON文件,一个包含用户,另一个包含电子邮件模板
我正在遍历电子邮件模板中的代码,当有键作为值时,如下所示:
"keyToFind": "Username"
然后我想在另一个JSON文件中获取Username的值:
"Username": "ssmith"
KeyToFind可以是一些不同的东西,例如Password或Group,我想避免编写特定的if语句
我正在尝试在循环中执行此操作,但似乎无法在方括号表示法中使用变量
for _, emailElements := range emailTemplates.EmailSpecification {
for _, fieldName := range structs.Names(&User{}) {
if emailElements.KeyToFind == fieldName {
EmailBody.WriteString(user[fieldName])
}
}
以上内容试图做的是遍历电子邮件模板中的元素,然后遍历Users结构中的字段;其中获取了KeyToFind类型的模板JSON文件中的emailElement,它与struct中的字段名称相同;在用户值中查找KeyToFind
我可以用Python做到这一点
如何重写第4行以在Go中工作? ->用户[FieldName]
我得到的错误是:
user[fieldName] (type User does not support indexing)
但是,如果我再次在第4行中写上这样的话:
user.Username
它可以正常工作,但这显然仅适用于用户名,它们可以是KeyToFind中值的密码或组
以下是JSON文件:
电子邮件模板:
"emailName": "customer",
"emailSpecification": [
{
"emailSubject": "Hi"
},
{
"text": "Username: "
},
{
"keyToFind": "Username"
}
]
我想获取KeyToFind的值并在User文件中搜索属性,然后从该属性返回值
用户文件:
[
{
"UserType": "customer",
"Username": "ssmith",
"Password": "sophie"
}
]
答案 0 :(得分:0)
我是通过将User结构转换为地图来获得的,一旦成为地图,您就可以使用括号符号并在其中加上点符号
在我的上下文中,然后我不得不转换为字符串以传递到缓冲区需要的WriteString函数中
这是最终版本:
for _, emailElements := range emailTemplates.EmailSpecification {
for _, fieldName := range structs.Names(&User{}) {
if emailElements.KeyToFind == fieldName {
EmailBody.WriteString(structs.Map(user)[emailElements.KeyToFind].(string))
}
}
}
它正在使用该软件包:
"github.com/fatih/structs"