然后json stringify从URL解析

时间:2015-03-09 19:22:14

标签: javascript json angularjs url

我似乎在stringify中遇到了问题,然后从网址对象中提取

我只是将我的对象字符串化并设置位置(使用angulars $ location),如此

 currentUrl = {"module1" : {"is" : true} }
 $location.search(JSON.stringify(currentUrl));

所以这解析到网址就好了,但是当我尝试从网址抓取它时我得到了回来

     console.log($location.search());
      ---
     Object {{"module1":{"is":true}}: true}

如何将其解析回对象以便我可以使用它?如果我做

 JSON.parse($location.search());

我收到语法错误。我可能是因为搜索如何返回对象?我在这里有点困惑,可以使用一些帮助。谢谢!

所以我把它放在了

的网址中
   $location.search(JSON.stringify(currentUrl));

我需要采取哪些步骤才能恢复到这种形式:

 {"module1" : {"is" : true} }

编辑 -

它似乎只是将json对象设置为

之类的位置的键
 { "mystrigifiedobject": true }

Edit2:

基于第一次编辑,我能够解决它(将其设置在位置对象键中),如下所示:

  currentUrl = $location.search();
                    currentUrl = JSON.parse(Object.keys(currentUrl));
                    console.log(currentUrl);

这只是感觉有点奇怪,我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

$ location.search()将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/

但请注意:在将字符串放入网址时,您应对其进行编码:

$location.search(encodeURIComponent(JSON.stringify(currentUrl))); 

答案 1 :(得分:0)

$routeParams提供对路由模板值和查询字符串值的访问(作为字符串)。

function ctrl($routeParams) {
    var yourValueAsString = $routeParams.yourKey;
}

function ctrl2($location) {
    $location.search('yourKey', JSON.stringify(...));
}

更好的选择是切换到使用UI路由器来更好地处理这个问题。