python - json.dump 无法序列化包含 python 列表的字典

标签 python json list serialization dictionary

我在一个名为 result 的 python 字典中有这部分 [{'scenariotestinputid': 1, 'scenariotestinputid': 1, 'testinputid_id': 1}]。当我调用 json.dumps(result) 时,我得到一个 TypeError 说 [{'scenariotestinputid': 1, 'scenariotestinputid': 1, 'testinputid_id': 1}] 不是 JSON 可序列化的。谁能解释一下为什么?

Edit1:完整的“result”字典内容为:

result: {'scenarios': [{'inputs': [{'scenariotestinputid': 1, 'scenarioid_    id': 1, 'testinputid_id': 1}], 'scenarioid': 1, 'scenarioname': u'Default Scenario', 'testid_id': 1, 'isdefault': 1}, {'inputs': [], 'scenarioid': 2, 'scenarioname': u'Scenario-1', 'testid_id': 1, 'isdefault': 0}], 'status': 'success'}

我使用的代码是:

if x == y:
    scenarios_list = Scenario.objects.filter(testid=testcase).order_by("scenarioname")
    scenarios_dict_list = []
    for scenario in scenarios_list:                                            
        scenario_inputs = scenario.scenariotestinput_set.values()
        scenario_dict = scenario.__dict__
        del scenario_dict['_state']
        scenario_dict['inputs'] = scenario_inputs            
        scenarios_dict_list.append(scenario_dict)
        result['scenarios'] = scenarios_dict_list
result['status'] = "success"
return HttpResponse(json.dumps(result), content_type="application/json")

函数内部

Edit2:回溯如下:

(Pdb) 
> /opt/my_apps/cpr_proj/cpr/views.py(512)set_benchmark_metrics_dispatcher()
-> return HttpResponse(json.dumps(result), content_type="application/json")
(Pdb) 
TypeError: TypeErro...izable",)
> /opt/my_apps/cpr_proj/cpr/views.py(512)set_benchmark_metrics_dispatcher()
-> return HttpResponse(json.dumps(result), content_type="application/json")
(Pdb) bt
  /opt/Python-2.7.3/Lib/threading.py(524)__bootstrap()
-> self.__bootstrap_inner()
  /opt/Python-2.7.3/Lib/threading.py(551)__bootstrap_inner()
-> self.run()
  /opt/Python-2.7.3/Lib/threading.py(504)run()
-> self.__target(*self.__args, **self.__kwargs)
  /opt/Python-2.7.3/Lib/SocketServer.py(582)process_request_thread()
-> self.finish_request(request, client_address)
  /opt/Python-2.7.3/Lib/SocketServer.py(323)finish_request()
-> self.RequestHandlerClass(request, client_address, self)
  /usr/local/lib/python2.7/site-packages/django/core/servers/basehttp.py(139)__init__()
-> super(WSGIRequestHandler, self).__init__(*args, **kwargs)
  /opt/Python-2.7.3/Lib/SocketServer.py(638)__init__()
-> self.handle()
  /opt/Python-2.7.3/Lib/wsgiref/simple_server.py(124)handle()
-> handler.run(self.server.get_app())
  /opt/Python-2.7.3/Lib/wsgiref/handlers.py(85)run()
-> self.result = application(self.environ, self.start_response)
  /usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py(67)__call__()
-> return self.application(environ, start_response)
  /usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py(241)__call__()
-> response = self.get_response(request)
  /usr/local/lib/python2.7/site-packages/django/core/handlers/base.py(111)get_response()
-> response = callback(request, *callback_args, **callback_kwargs)
> /opt/my_apps/cpr_proj/cpr/views.py(512)set_benchmark_metrics_dispatcher()
-> return HttpResponse(json.dumps(result), content_type="application/json")
  /opt/Python-2.7.3/Lib/json/__init__.py(231)dumps()
-> return _default_encoder.encode(obj)
  /opt/Python-2.7.3/Lib/json/encoder.py(201)encode()
-> chunks = self.iterencode(o, _one_shot=True)
  /opt/Python-2.7.3/Lib/json/encoder.py(264)iterencode()
-> return _iterencode(o, 0)
  /opt/Python-2.7.3/Lib/json/encoder.py(178)default()
-> raise TypeError(repr(o) + " is not JSON serializable")

最佳答案

values() 的输出仍然是一个 QuerySet 对象,因为它允许您在它之后链接其他方法。添加完选项后,您需要将其“呈现”到适当的列表中:

scenario_inputs = list(scenario.scenariotestinput_set.values())

关于python - json.dump 无法序列化包含 python 列表的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15303353/

相关文章:

python - Python 中的 Statsmodels 包 - 检索 ARIMA 模型的样本外预测的问题

json - 我们可以将电子邮件 ID 作为 Firebase 数据库中的键吗?

R:如何合并列表中的逻辑元素

list - haskell 列表中的唯一元素

c# - 如何在 C# 中列出 %TEMP% 和 %USERNAME% 目录?

python - 保持 PyQt UI 对线程的响应

python - 如何使用 python-pandas 同时分解两个数据框?

PythonAnywhere:django.db.utils.OperationalError:没有这样的表:

java - Hibernate + Json + 字符串数组

c# - 序列化C#对象,想反序列化为接口(interface)