2016-10-18 74 views
0

我有一个JSON对象,看起来像这样:序列化JSON对象的Django的URL

var obj = { 
    "selection":[ 
     { 
     "author":"John Doe", 
     "articles":[ 
      "Article One", 
      "Article Two" 
     ] 
     } 
    ] 
} 

我想通过这个对象来Django的渲染,显示“壹条”的景色,“第二条'渲染后。我首先序列化JSON对象,以便它可以附加到URL;我使用$.param(obj)进行序列化。现在,JSON对象看起来是这样的:

"selection%5B0%5D%5Bauthor%5D=John+Doe&selection%5B0%5D%5Barticles%5D%5B%5D=Article+One&selection%5B0%5D%5Barticles%5D%5B%5D=Article+Two" 

现在我可以把这段路径和使用window.open(url)视图会处理一切。在Django的结束,我很惊讶地看到,JSON对象的结构发生了变化,以这样的:

"selection[0][author]=John+Doe&selection[0][articles][]=Article+One&selection[0][articles][]=Article+Two" 

我希望能够使用JSON对象作为字典如:

obj = request.GET.get('selection') 
obj = json.loads(obj) 
print(obj[0].author) 
... 

我应该如何在Django方面处理这个JSON结构?

+0

我可能不在这里。但是,你不能使用'JSON.stringify',然后编码并发送到视图? – dunder

+0

@dunder你很重要。我完全错过了'encodeURIComponent()',因为我认为'$。param()'是唯一的出路。 – FatHippo

+0

很酷。为什么你要在'GET'调用中使用'json'?同样,使用'author'和'articles'参数可以实现同样的效果吗? – dunder

回答

0

即使你说你这样做,你也没有正确地将对象序列化为JSON。正确的方法是使用JSON.stringify()作为@dunder状态。

比你解析它回到一个对象JSON.parse(strignifiedJson)

var obj = { 
    "selection":[ 
     { 
     "author":"John Doe", 
     "articles":[ 
      "Article One", 
      "Article Two" 
     ] 
     } 
    ] 
} 
// Stringify and encode 
var objAsParam = encodeURIComponent(JSON.stringify(obj)); 

// Send as a param, for example like http://example.com?obj=YourStringifiedObject... 

// Parse it back: 
var parsedObj = JSON.parse(decodeURIComponent(objAsParam)); 
+0

'encodeURIComponent(JSON.stringify(obj))'为我做了诀窍。我也意识到我应该将该参数添加到URL中,即''... /?selection ='+ '。 – FatHippo