在我正在运行的单元测试用例中,我在下面的json文本中的第4个json对象上得到了一个KeyError异常,因为负责解码的代码块正在寻找一个对象,那里,但应该是。python simpleJSONDecoder和复杂的JSON问题
我经历了子对象,发现它是导致问题的“cpuid”对象。当我删除它并运行测试时,它工作正常。
DEF _make_report_entry(记录):
response = self.app.post(
'/machinestats',
params=dict(record=self.json_encode([
{"type": "crash", "instance_id": "xxx",
"version": "0.2.0", "build_id": "unknown",
"crash_text": "Gah!"},
{"type": "machine_info", "machine_info": "I'm awesome.",
"version": "0.2.0", "build_id": "unknown",
"instance_id": "yyy"},
{"machine_info": "Soup", "crash_text": "boom!",
"version": "0.2.0", "build_id": "unknown",
"instance_id": "zzz", "type": "crash"},
{"build_id" : "unknown", "cpu_brand" : "intel",
"cpu_count" : 4,
"cpuid": {
"00000000":
{"eax" :123,"ebx" :456,
"ecx" :789,"edx" :321},
"00000001":
{"eax" :123,"ebx" :456,
"ecx" :789,"edx" :321}},
"driver_installed" : True,
"instance_id" : "yyy",
"version" : "0.2.0",
"machine_info" : "I'm awesome.",
"os_version" : "linux",
"physical_memory_mib" : 1024,
"product_loaded" : True,
"type" : "machine_info",
"virtualization_advertised" : True}
])))
在一段代码被测试,我使用simplejson.JSONDecoder从django.utils到JSON解码。当我记录传递给解码函数的上述JSON的解码输出时,我得到:
root:INFO:{u'instance_id':u'xxx',u'type':u'crash' ,u'crash_text':u'Gah!',u'version':u'0.2.0',u'build_id':u'unknown'}
root:INFO:{u'build_id':u'未知',u'instance_id':u'yyy',u'version':u'0.2.0',u'machine_info':u“我很棒。”,u'type':u'machine_info'}
root:INFO:{u'build_id':u'unknown',u'machine_info':u'Soup',u'version':u'0.2.0',u'instance_id':u'zzz', u'crash_text':u'boom!',u'type':u'crash'}
root:INFO:{u'eax':123,u'edx':321,u'ebx':456,u'ecx':789}
在最后一个JSON对象上,只有JSON中的对象cpuid对象正在传递给我的解码功能。因为我的解码函数期望其他对象(例如'type','instance_id'等),所以我得到一个KeyError异常。
[对不起,前面不必要的长时间后,我希望这将缩小它有点更多]
你能粘贴确切的错误? – 2010-06-01 01:11:41
什么是* self * .json_encode?你写的东西? – 2010-06-01 01:22:00
它有很多信息,但还不够,因为堆栈跟踪看起来不完整 - 并且其中的踪迹暗示了正在进行的_decoding_情况,而不是**编码(正如您原来的Q建议的那样)。也许你错用了一些你自己的模特?无法分辨,因为我们没有看到模型的定义。 – 2010-06-01 02:00:48