Javascript 如何获取JS对象键的文本值

Javascript 如何获取JS对象键的文本值,javascript,string,javascript-objects,string-literals,Javascript,String,Javascript Objects,String Literals,我正在与一个Active Directory通信,它会以用户参数作为响应。这些参数包括CN和DN。由于此DN的结构可能因系统而异,因此我需要提出一个通用解决方案 我面临的问题是DN返回时带有双反斜杠,如下所示: User: { dn: 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL', cn: 'LastName, Surname' } 然后,当我请求该用户所属的所有组时,该操作失败。当我尝试访问此对象的键“dn”时,双反斜杠会自动

我正在与一个Active Directory通信,它会以用户参数作为响应。这些参数包括CN和DN。由于此DN的结构可能因系统而异,因此我需要提出一个通用解决方案

我面临的问题是DN返回时带有双反斜杠,如下所示:

User:  { 
  dn: 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL',
  cn: 'LastName, Surname' 
}
然后,当我请求该用户所属的所有组时,该操作失败。当我尝试访问此对象的键“dn”时,双反斜杠会自动解析为单个反斜杠。像这样:

User dn:  CN=LastName\, SurName,OU=People,DC=COMP,DC=NL
这不会返回任何结果,因为成员以双反斜杠存储在AD中

我需要一种通用的方法以文本形式获取对象键的值,而不需要JavaScript解析转义字符

DN的AD系统内也可能出现以下形式:

DN: CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL
DN: CN=LastName\, SurName,OU=People,DC=COMP,DC=NL
DN: CN=Surname LastName,OU=People,DC=COMP,DC=NL
DN: CN=LastName SurName,OU=People,DC=COMP,DC=NL
我已经尝试了String.raw、escape()、JSON.stringify,但所有这些都会导致无效的DN,我可以将其粘贴到用户组的搜索查询中

更新 正如在回答中指出的那样,我的解释并不彻底。 因此,上面描述的返回对象是正确的,即通过LDAP搜索(首先搜索用户)从AD返回的对象

然后将其注入函数中,该函数在不修改或触摸对象的情况下请求该特定用户的所有组,并按照以下方式构造过滤器(其中ldapUser是上面的对象):

顺便说一下,我在nodejsv10.15.3上使用了ldapjs包。 打印时产生的过滤器为:

filter:  (&(objectClass=group)(member=CN=LastName\, SurName,OU=People,DC=COMP,DC=NL))
更新2 下面是各种console.log语句的请求输出:

console.log(ldapUser.dn, opts.filter);
CN=LastName\, SurName,OU=People,DC=COMP,DC=NL (&(objectClass=group)(member=CN=LastName\, SurName,OU=People,DC=COMP,DC=NL))

console.log(ldapUser, ldapUser.dn, opts.filter);
{ dn: 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL',
  controls: [],
  cn: 'LastName, SurName' } 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL' '(&(objectClass=group)(member=CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL))'

console.log(opts);
{ 
filter: '(&(objectClass=group)(member=CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL))',
  scope: 'sub',
  attributes: [ 'dn', 'cn' ] 
}

如果AD返回值为
CN=LastName\\、姓氏、OU=People、DC=COMP、DC=NL的字符串,则双反斜杠将不会被解释为单个反斜杠。只有字符串文字将尝试将反斜杠解释为转义序列-字符串的值是进行此解释后的结果。如果没有字符串文字,则没有解释-值为
\n
的字符串将具有文字值
\n
而不是新行,无论您如何传递它。@VLAZ仅字符串文字。。。和JSON解析。类似地,手动完成的JSON字符串化可能会错过反斜杠的强制加倍。我们没有要检查的代码,我们不知道使用了哪个协议,所以很难知道发生了什么。@Amadan是的,还有JSON.parse,它将对字符串值进行第二次解释。但如果失败了,那么AD首先就无法正确发送值,因为它需要避开反斜杠.String.raw似乎是一个不错的选择。你是怎么失败的?@VLAZ:我想说的是,虽然你所说的是真的(斜杠不会随机出现或消失,除非有什么事情让他们这样做,而且通常人们在解释文字或检查值时会遇到问题),但显然出了问题(或者这个问题不会被问到);要弄清真相,唯一的办法就是更多地了解正在发生的事情。
console.log(ldapUser.dn, opts.filter);
CN=LastName\, SurName,OU=People,DC=COMP,DC=NL (&(objectClass=group)(member=CN=LastName\, SurName,OU=People,DC=COMP,DC=NL))

console.log(ldapUser, ldapUser.dn, opts.filter);
{ dn: 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL',
  controls: [],
  cn: 'LastName, SurName' } 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL' '(&(objectClass=group)(member=CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL))'

console.log(opts);
{ 
filter: '(&(objectClass=group)(member=CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL))',
  scope: 'sub',
  attributes: [ 'dn', 'cn' ] 
}