【问题标题】:python unpack a dict from jsonpython从json中解压一个dict
【发布时间】:2014-05-28 14:16:38
【问题描述】:

我一直在寻找,但我找不到答案,我的猜测是我的问题没有很好地定义,所以我希望得到一些指导

我正在使用 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'}

我正在发送一个包含 3 列的表中的数据

在我的服务器上,我试图分离每一行的数据,但我在这里有点迷失了。 如何将该 dict 拆分为不同的数据行?

在做

import json
json.loads(str(kw))

失败

{ValueError}: Expecting property name: line 1 column 2 (char 1)

如何将该 dict/object 转换为嵌套字典(或其他东西)? 谢谢

【问题讨论】:

  • 你没有发布 JSON;您发布了 jQuery 为 PHP 数组功能格式化的 application/x-www-form-urlencoded 数据。
  • 请向我们展示您发布的 JavaScript (jQuery) 代码。
  • 我已经添加了答案,谢谢您的帮助

标签: javascript python json dictionary turbogears2


【解决方案1】:

感谢Martijn Pieters 的帮助,我以为我在发布 JSON,但我没有。

您没有发布 JSON;您发布了 jQuery 为 PHP 数组功能格式化的 application/x-www-form-urlencoded 数据。 ——马丁·彼得斯

这是我的 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'])
        ...

我将数据作为行的字典,很棒

感谢指导

【讨论】:

    【解决方案2】:

    要发布 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 提供的控制器,这将特别有帮助。

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 2019-05-27
      • 2022-12-12
      相关资源
      最近更新 更多