【问题标题】:Dict type throws error in json.dumpsDict 类型在 json.dumps 中引发错误
【发布时间】:2015-06-16 20:55:10
【问题描述】:

我将字典传递给json.dumps,但它仍然抛出错误:

TypeError: Undefined is not json serializable

我什至在调用函数之前检查类型以确保它是字典类型。我正在使用 Flask 微框架并尝试将包含非常简单的 json 的 Response 对象返回给 ajax 请求:

$(document).ready(function() {

$.getJSON($SCRIPT_ROOT + '/getDictionary', function(data) {

    console.log(data);

});

});

@app.route('/getDictionary')

def getDictionary():

    empty_dic = {'empty' : 'dict'}

    if type(empty_dic) is dict:
        return Response(json.dumps(empty_dic), mimetype = "application/json")

【问题讨论】:

  • 我尝试运行你的代码并得到SyntaxError: 'return' outside functionMCVE 请:-)
  • 您显然在这里使用了某种 Web 框架,并向我们展示了该框架的处理程序函数的片段,假设有 return Response(…) 位。所以你必须告诉我们哪个框架。而且,正如@Kevin 所说,给我们一个完整的例子。其中包括完整的追溯。 (我的猜测是该框架实际上正在尝试做一些 JSON 的东西,异常来自框架内部,而不是您自己可能不需要的 json.dumps,但这只不过是基于您的微不足道信息的猜测已经给了我们。)
  • 另外,这段代码中有一大堆错误——emptyDicemptydic 应该给你一个 NameError 如果你幸运的话,或者使用一些完全不同的对象如果你'不; .encoded('utf8') 而不是 .encode 肯定会给你一个 AttributeError;等等。将您的示例归结为您实际询问的一个错误,或者甚至没有人可以为您调试该错误。

标签: python json dictionary typeerror


【解决方案1】:

这是一个有效的例子:

import json

emptydic = {'simple' : 'dict'}

if isinstance(emptydic, dict):    # Note capitalization
    print(json.dumps(emptydic))   # {"simple": "dict"}

类型检查条件略有变化,我去掉了 Response/mimetype 的东西,因为它似乎与您的问题正交。

【讨论】:

  • 如果可行,那么我猜该错误必须出在返回的 Response 对象中。
  • @kag359six 该错误很可能是由Response 对象的创建引起的。完整的追溯将能够证实这一点。
【解决方案2】:

您的大写已关闭,请注意您定义了emptydic,但尝试序列化emptyDic。试试这个:

empty_dict = {'simple' : 'dict'}

if type(empty_dict) is dict:
    return Response(json.dumps(empty_dict).encoded('utf8'), mimetype = "application/json")

请注意,PEP8 对变量使用驼峰式大小写也是反对的。推荐蛇盒

【讨论】:

  • 抱歉,我更新了我的问题。 emptyDic vs emptydic 是在问问题而不是在代码本身时出错
【解决方案3】:

您的字典名称为“emptydic”

在条件下,你使用“emptyDic”

试试:

emptyDic = {"simple": "dict"}

if type(emptyDic) is dict:
    return Response(json.dumps(emptyDic).encoded('utf8'), mimetype = "application/json")

【讨论】:

    【解决方案4】:

    你有没有机会尝试这个

    json.dumps(emptydic, encoding='utf-8')
    

    我正在 Python 2.7 上尝试这个,字符串对象将没有一个名为 encoding 的属性。

    【讨论】:

    • 我已经尝试过完全不使用编码参数,但它仍然无法以最基本的形式工作。
    猜你喜欢
    • 2018-05-18
    • 2013-01-15
    • 2014-01-18
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2015-11-24
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多