Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing Golang解析json响应_Parsing_Go_Ldap - Fatal编程技术网

Parsing Golang解析json响应

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=.............................................,

这里是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=.............................................,
       "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