我有这个cookie
{"__ngDebug":"true","userdata":"j:{\"id\":10099,\"username\":\"somename@gmail.com\",\"email\":\"somename@gmail.com\",\"role\":\"candidate\"}"}
如果我做cookie.userdata我得
"j:{\"id\":10099,\"username\":\"somename@gmail.com\",\"email\":\"somename@gmail.com\",\"role\":\"candidate\"}"
如果我cookie.userdata.j
我什么都没得到。我需要做些什么来获取电子邮件,用户名和角色?
答案 0 :(得分:3)
这是因为cookie.userdata
的结果是string
而不是object
。
不幸的是,您不能直接将结果解析为JSON.parse
的JSON,因为userdata
的值无效JSON(它是对象语法而不包含在{
和{{ 1}},}
需要包含在j
)
要解决此问题,您需要重新格式化输入字符串,如果可能的话,
"
注意我已将{"__ngDebug":"true","userdata":{"j":{"id":10099,"username":"somename@gmail.com","email":"somename@gmail.com","role":"candidate"}}}
和{
添加到}
的开头和结尾,并将userdata
包裹在j
中。此外,我删除了"
和\
左右"
的值,因为我们希望它是userdata
而不是object
。
这样做,您应该能够像string
一样获得j
的价值。
如果由于某种原因必须将cookie.userdata.j
作为j
,这也可以,
string
注意我在{"__ngDebug":"true","userdata":"{\"j\":{\"id\":10099,\"username\":\"somename@gmail.com\",\"email\":\"somename@gmail.com\",\"role\":\"candidate\"}}"}
的开头和结尾添加了{
和}
,我在userdata
j
然后你应该能够通过"
如果由于某种原因无法在源位置修复输入,可以使用JSON.parse(cookie.userdata).j
cookie.userdata
进行一些调整以使其成为有效的JSON,然后在其上使用string
假设JSON.parse
产生以下内容,
cookie.userdata
然后,您可以执行以下操作将其强制转换为有效对象。
"j:{\"id\":10099,\"username\":\"somename@gmail.com\",\"email\":\"somename@gmail.com\",\"role\":\"candidate\"}"
我在这里做的是添加JSON对象分隔符val = cookie.userdata
objVal = JSON.parse('{' + val.replace('j:', '"j":') + '}')
j = objVal.j
和{
并将}
包装在j
中,这是JSON标准所要求的。
使用上述任何一种方法,一旦您在对象中"
,就可以轻松获得j
,username
和email
。< / p>
role