用Python解包JSON中的字典

0 投票
2 回答
1626 浏览
提问于 2025-04-18 07:50

我一直在寻找答案,但找不到。我猜我的问题可能没有描述清楚,所以希望能得到一些指导。

我在使用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'])
        ...

现在我得到了一个包含行的字典,太好了。

感谢你的指导。

撰写回答