Parsing Golang解析json响应
这里是total Go newbie,我试图解析来自LDAP服务的响应,该服务具有以下结构Parsing Golang解析json响应,parsing,go,ldap,Parsing,Go,Ldap,这里是total Go newbie,我试图解析来自LDAP服务的响应,该服务具有以下结构 { "isMemberOf": [ “cn=group1,ou=groups,dc=example,dc=domain,dc=com", “cn=group2,ou=groups,dc=example,dc=domain,dc=com", "cn=.............................................,
{
"isMemberOf": [
“cn=group1,ou=groups,dc=example,dc=domain,dc=com",
“cn=group2,ou=groups,dc=example,dc=domain,dc=com",
"cn=.............................................,
"cn=.............................................
]
}
我需要将所有cn=值(例如:group1、group2)收集到一个[]字符串中,如[group1、group2]或一个结构
正如我所说,我是一个完全的新手去,并将感谢任何关于如何实现上述目标的指针
struct type UserGroups struct {
IsMemberOf []string `json:"isMemberOf"`
}
//part of main code
//receive the response from the service
body, err := ioutil.ReadAll(res.Body)
if err != nil {
panic(err.Error())
}
s, err := getUserGroups([]byte(body))
fmt.Println(s.IsMemberOf[0])
//end main code
//function to read user groups
func getUserGroups(body []byte) (*UserGroups, error) {
var s = new(UserGroups)
err := json.Unmarshal(body, &s)
if(err != nil){
fmt.Println("whoops:", err)
}
return s, err
}
//输出
cn=group1,ou=groups,dc=example,dc=domain,dc=com
我想我可以找到cn=发生的时间长度
count:=strings.count(字符串(正文),“cn=”)
然后使用该计数遍历上面的数组,但如果没有一些额外的逻辑,仍然无法得到我想要的数组。我错过了做这件事的方法
如果有人能找到更好的替代方案,我将不胜感激
谢谢
kris首先,您需要解析数据
下一步是解析每个单独的LDAP筛选器。您可以在您的用例中使用
import "regexp"
var re = regexp.MustCompile("cn=([a-z0-9]+)")
commonNames := make([]string, len(input.Items))
for i, filter := range input.Items {
commonNames[i] = re.FindAllString(filter, 1)[0]
}
// commonNames has the values you want
不幸的是,LDAP搜索过滤器可能需要实现一个合适的解析器。比如说 如果我知道如何解析它,我就不会问这个问题Xy MCXFace在这一行抛出一个超出范围的索引-->commonNames[I]=re.FindAllString(filter,1)[0]@krim70听起来并不是每一行都有匹配项。在这种情况下,您可以检查匹配的长度并选择性地附加到切片。祝你好运谢谢你,AJcodez,你的代码为我提供了实现所需的正确方向
import "regexp"
var re = regexp.MustCompile("cn=([a-z0-9]+)")
commonNames := make([]string, len(input.Items))
for i, filter := range input.Items {
commonNames[i] = re.FindAllString(filter, 1)[0]
}
// commonNames has the values you want