我有一个cookie作为json回来,但无法获得价值?

时间:2014-09-07 23:40:49

标签: json angularjs cookies

我有这个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我什么都没得到。我需要做些什么来获取电子邮件,用户名和角色?

1 个答案:

答案 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标准所要求的。

结论

使用上述任何一种方法,一旦您在对象中",就可以轻松获得jusernameemail。< / p>

role