用Python解包JSON中的字典
我一直在寻找答案,但找不到。我猜我的问题可能没有描述清楚,所以希望能得到一些指导。
我在使用turbogears2.2。我通过$.post()从客户端发送一个JavaScript对象。
在服务器上,我收到了这个对象(作为kw):
{'phones[1][surname]': u'sym', 'phones[2][name]': u'', 'phones[1][phone]': u'5498498', 'phones[0][phone]': u'0564', 'phones[1][name]': u'jhon', 'phones[0][surname]': u'cat', 'phones[2][phone]': u'', 'phones[0][name]': u'bob'}
我从一个有三列的表格中发送数据。
在我的服务器上,我想把每一行的数据分开,但我有点迷茫。请问我该如何将这个字典拆分成不同的数据行呢?
我尝试了:
import json
json.loads(str(kw))
但失败了。
{ValueError}: Expecting property name: line 1 column 2 (char 1)
我该如何把这个字典/对象转换成一个嵌套字典(或者其他形式)呢?谢谢!
2 个回答
0
如果你想发送 JSON 数据,别用 $.post()
。应该用 $.ajax()
,并且要明确设置内容类型:
$.ajax({
url: URL,
type: "POST",
data: JSON.stringify({phone: tableData.getData()}),
contentType: 'application/json; charset=utf-8'
dataType: 'json',
success: function(data) {
console.log(response);
},
});
这样做特别有用,如果你有一个直接处理 JSON 的控制器,比如 TurboGears Web Services 提供的那种。
0
感谢你的帮助,Martijn Pieters,我以为我发的是JSON格式的数据,其实不是。
你发的不是JSON;你发的是一种叫做application/x-www-form-urlencoded的数据,这种格式是jQuery为了PHP数组功能而格式化的。– Martijn Pieters
这是我的JavaScript代码,我正在尝试使用HandsOnTable(一个jQuery数据表格编辑器)
$("#sendToServer").click(function(){
var tableData = $("#myTable").data('handsontable');
$.post(
URL,
{phones:tableData.getData()},
function(data){
console.log(data)
}
)
})
虽然我以为那是JSON,但其实不是。
不过,解决方法很简单:
客户端(JavaScript):
var tableData = $("#myTable").data('handsontable');
var jsonData = JSON.stringify(tableData.getData())
...
$.post(URL,
{phones:jsonData},
...
)
现在在服务器端(Python):
import json
def getPhones(self,**kw):
phones = json.loads(kw['phones'])
...
现在我得到了一个包含行的字典,太好了。
感谢你的指导。