为Django URL序列化JSON对象

时间:2016-10-18 09:12:43

标签: javascript python json django

我有一个看起来像这样的JSON对象:

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

我想将此对象传递给Django,以呈现在渲染时显示“Article One”和“Article Two”的视图。我首先序列化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对象用作dict,例如:

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

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

1 个答案:

答案 0 :(得分: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));