我有一个作为json返回的cookie,但是可以';你没有得到价值吗?

我有一个作为json返回的cookie,但是可以';你没有得到价值吗?,json,angularjs,cookies,Json,Angularjs,Cookies,我有这个饼干 {"__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

我有这个饼干

 {"__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
我什么也得不到。要获取电子邮件、用户名和角色,我必须做些什么?

问题 这是因为
cookie.userdata
的结果是
字符串
而不是
对象

不幸的是,您无法使用
JSON.parse将结果直接解析为JSON,因为
userdata
的值不是有效的JSON(它是对象语法,没有包装在
{
}
中,并且
j
需要包装在
中)

最佳方法:在源代码处修复输入 要解决这个问题,您需要重新格式化您的输入字符串,如果可能的话

{"__ngDebug":"true","userdata":{"j":{"id":10099,"username":"somename@gmail.com","email":"somename@gmail.com","role":"candidate"}}}
注:我将
{
}
添加到
userdata
的开头和结尾,并将
j
包装在
中。此外,我还删除了
\
用户数据值周围的
,因为我们希望它是
对象
而不是
字符串

这样做,您应该能够像这样获得
cookie.userdata.j
的值

如果出于某种原因必须将
j
作为
字符串
,这也会起作用

{"__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
string
进行一些修改,使其成为有效的JSON,然后对其使用
JSON.parse

假设
cookie.userdata
产生以下结果

"j:{\"id\":10099,\"username\":\"somename@gmail.com\",\"email\":\"somename@gmail.com\",\"role\":\"candidate\"}"
然后可以执行以下操作将其强制为有效对象

val = cookie.userdata
objVal = JSON.parse('{' + val.replace('j:', '"j":') + '}')
j = objVal.j
我在这里做的是添加JSON对象分隔符
{
}
,并将
j
包装到
,这是JSON标准所要求的

结论 使用上述任何一种方法,在对象中拥有
j
后,只需获取
用户名
电子邮件
角色

j.username => "somename@gmail.com"
j.email => "somename@gmail.com"
j.role => "candidate"
问题 这是因为
cookie.userdata
的结果是
字符串
而不是
对象

不幸的是,您无法使用
JSON.parse将结果直接解析为JSON,因为
userdata
的值不是有效的JSON(它是对象语法,没有包装在
{
}
中,并且
j
需要包装在
中)

最佳方法:在源代码处修复输入 要解决这个问题,您需要重新格式化您的输入字符串,如果可能的话

{"__ngDebug":"true","userdata":{"j":{"id":10099,"username":"somename@gmail.com","email":"somename@gmail.com","role":"candidate"}}}
注:我将
{
}
添加到
userdata
的开头和结尾,并将
j
包装在
中。此外,我还删除了
\
userdata
值周围的
,因为我们希望它是
对象,而不是
字符串

这样做,您应该能够像这样获得
cookie.userdata.j
的值

如果出于某种原因必须将
j
作为
字符串
,这也会起作用

{"__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
string
进行一些修改,使其成为有效的JSON,然后对其使用
JSON.parse

假设
cookie.userdata
产生以下结果

"j:{\"id\":10099,\"username\":\"somename@gmail.com\",\"email\":\"somename@gmail.com\",\"role\":\"candidate\"}"
然后可以执行以下操作将其强制为有效对象

val = cookie.userdata
objVal = JSON.parse('{' + val.replace('j:', '"j":') + '}')
j = objVal.j
我在这里做的是添加JSON对象分隔符
{
}
,并将
j
包装到
,这是JSON标准所要求的

结论 使用上述任何一种方法,在对象中拥有
j
后,只需获取
用户名
电子邮件
角色

j.username => "somename@gmail.com"
j.email => "somename@gmail.com"
j.role => "candidate"
问题 这是因为
cookie.userdata
的结果是
字符串
而不是
对象

不幸的是,您无法使用
JSON.parse将结果直接解析为JSON,因为
userdata
的值不是有效的JSON(它是对象语法,没有包装在
{
}
中,并且
j
需要包装在
中)

最佳方法:在源代码处修复输入 要解决这个问题,您需要重新格式化您的输入字符串,如果可能的话

{"__ngDebug":"true","userdata":{"j":{"id":10099,"username":"somename@gmail.com","email":"somename@gmail.com","role":"candidate"}}}
注:我将
{
}
添加到
userdata
的开头和结尾,并将
j
包装在
中。此外,我还删除了
\
用户数据值周围的
,因为我们希望它是
对象
而不是
字符串

这样做,您应该能够像这样获得
cookie.userdata.j
的值

如果出于某种原因必须将
j
作为
字符串
,这也会起作用

{"__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
string
进行一些修改,使其成为有效的JSON,然后在上使用
JSON.parse