在我正在運行的單元測試用例中,我在下面的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