Json 字符串化然后从 URL 解析
Json stringify then parse from URL
我似乎在字符串化然后从 url 对象
中删除时遇到问题
我只是将我的对象字符串化并设置位置(使用角度 $location),就像这样
currentUrl = {"module1" : {"is" : true} }
$location.search(JSON.stringify(currentUrl));
所以这解析到 url 很好,但是当我尝试从 url 中获取它时,我得到了它
console.log($location.search());
---
Object {{"module1":{"is":true}}: true}
如何将其解析回对象以便我可以使用它?如果我这样做
JSON.parse($location.search());
我收到语法错误。我可能是因为如何搜索returns对象?我在这里有点困惑,需要一些帮助。谢谢!
所以我把它放在 url 和
$location.search(JSON.stringify(currentUrl));
我需要采取哪些步骤才能将其恢复为这种形式:
{"module1" : {"is" : true} }
编辑 -
它只是将 json 对象设置为
等位置的键
{ "mystrigifiedobject": true }
编辑 2:
基于第一次编辑,我能够像这样解决它(假设它是在位置对象键中设置的):
currentUrl = $location.search();
currentUrl = JSON.parse(Object.keys(currentUrl));
console.log(currentUrl);
虽然这感觉有点奇怪,我在这里做错了吗?
$routeParams
提供对路由模板值和查询字符串值(作为字符串)的访问。
function ctrl($routeParams) {
var yourValueAsString = $routeParams.yourKey;
}
function ctrl2($location) {
$location.search('yourKey', JSON.stringify(...));
}
一个更好的选择是切换到使用 UI 路由器来更好地处理这个问题。
$location.search() returns 将 url 路径中的已解析搜索项作为对象。这意味着这种 url:
?a=b&c=d
将生成此对象:
{ a: 'b', c: 'd' }
调用此函数时:
currentUrl = {"module1" : {"is" : true} }
$location.search(JSON.stringify(currentUrl));
您的路径将如下所示:
?%7B%22module1%22:%7B%22is%22:true%7D%7D
从 $location.search
返回的已解析对象将如下所示:
{{"module1":{"is":true}}: true}
不是说这是一个只有一个条目的对象,关键是你的 JSON
因此,为了取回您的对象,您需要做的是:
var parsedObject = $location.search();
var yourObject = JSON.parse(Object.keys(parsedObject)[0]);
查看这个 jsfiddle:http://jsfiddle.net/HB7LU/11633/
但请注意:将字符串放入 url:
时,您应该对其进行编码
$location.search(encodeURIComponent(JSON.stringify(currentUrl)));
我似乎在字符串化然后从 url 对象
中删除时遇到问题我只是将我的对象字符串化并设置位置(使用角度 $location),就像这样
currentUrl = {"module1" : {"is" : true} }
$location.search(JSON.stringify(currentUrl));
所以这解析到 url 很好,但是当我尝试从 url 中获取它时,我得到了它
console.log($location.search());
---
Object {{"module1":{"is":true}}: true}
如何将其解析回对象以便我可以使用它?如果我这样做
JSON.parse($location.search());
我收到语法错误。我可能是因为如何搜索returns对象?我在这里有点困惑,需要一些帮助。谢谢!
所以我把它放在 url 和
$location.search(JSON.stringify(currentUrl));
我需要采取哪些步骤才能将其恢复为这种形式:
{"module1" : {"is" : true} }
编辑 -
它只是将 json 对象设置为
等位置的键 { "mystrigifiedobject": true }
编辑 2:
基于第一次编辑,我能够像这样解决它(假设它是在位置对象键中设置的):
currentUrl = $location.search();
currentUrl = JSON.parse(Object.keys(currentUrl));
console.log(currentUrl);
虽然这感觉有点奇怪,我在这里做错了吗?
$routeParams
提供对路由模板值和查询字符串值(作为字符串)的访问。
function ctrl($routeParams) {
var yourValueAsString = $routeParams.yourKey;
}
function ctrl2($location) {
$location.search('yourKey', JSON.stringify(...));
}
一个更好的选择是切换到使用 UI 路由器来更好地处理这个问题。
$location.search() returns 将 url 路径中的已解析搜索项作为对象。这意味着这种 url:
?a=b&c=d
将生成此对象:
{ a: 'b', c: 'd' }
调用此函数时:
currentUrl = {"module1" : {"is" : true} }
$location.search(JSON.stringify(currentUrl));
您的路径将如下所示:
?%7B%22module1%22:%7B%22is%22:true%7D%7D
从 $location.search
返回的已解析对象将如下所示:
{{"module1":{"is":true}}: true}
不是说这是一个只有一个条目的对象,关键是你的 JSON
因此,为了取回您的对象,您需要做的是:
var parsedObject = $location.search();
var yourObject = JSON.parse(Object.keys(parsedObject)[0]);
查看这个 jsfiddle:http://jsfiddle.net/HB7LU/11633/
但请注意:将字符串放入 url:
时,您应该对其进行编码$location.search(encodeURIComponent(JSON.stringify(currentUrl)));