例如:我有一个程序可以在JSON文件中生成这样的使用情况日志。 JSON文件日志包含很多相同的键,称为“活动”,如下所示:
"probe": "PROCESS_PROBE",
"status": "ProcessCreated",
"processName": "backgroundTaskHost.exe",
"path": "C:\\WINDOWS\\system32\\backgroundTaskHost.exe",
"creationClassName": "Win32_Process",
"handle": "21632",
"priority": "Normal",
"commandLine": "\"C:\\WINDOWS\\system32\\backgroundTaskHost.exe\" -ServerName:CortanaUI.AppXy7vb4pc2dr3kc93kfc509b1d0arkfb2x.mca",
"handleCount": 236,
"processId": 21632,
"parentProcessId": 112,
"pageFileUsage": 4244,
"creationDate": "20200410172922.614702+120",
"annotations": {
"userName": "datta",
"timeSinceStartup": 259878750,
"ticksOfEvent": 637221365629757593
}
},
"activity":{
"probe": "PROCESS_PROBE",
"status": "ProcessDeleted",
"processName": "RuntimeBroker.exe",
"path": "C:\\Windows\\System32\\RuntimeBroker.exe",
"creationClassName": "Win32_Process",
"handle": "8504",
"priority": "Normal",
"handleCount": 285,
"processId": 8504,
"parentProcessId": 112,
"pageFileUsage": 3180,
"creationDate": "20200410172757.934567+120",
"terminationDate": null,
"annotations": {
"userName": "datta",
"timeSinceStartup": 259883953,
"ticksOfEvent": 637221365681937472
}
},
"activity":{
"probe": "FILERESOURCE_PROBE",
"status": "Changed",
"path": "C:\\Users\\datta\\eclipse\\jee-2019-12",
"entityName": "eclipse",
"extension": "",
"attributes": "Directory",
"owner": "null",
"length": 0,
"isReadOnly": false,
"creationTime": "2020-01-17T09:42:08.5092897+01:00",
"lastWriteTime": "2020-03-25T10:56:10.7382329+01:00",
"lastAccessTime": "2020-04-10T17:29:29.9811767+02:00",
"annotations": {
"userName": "datta",
"timeSinceStartup": 259885750,
"ticksOfEvent": 637221365699837331
}
},
"activity":{
"probe": "FILERESOURCE_PROBE",
"status": "Changed",
"path": "C:\\Users\\datta\\eclipse",
"entityName": "jee-2019-12",
"extension": "",
"attributes": "Directory",
"owner": "null",
"length": 0,
"isReadOnly": false,
"creationTime": "2020-01-17T09:42:08.5083+01:00",
"lastWriteTime": "2020-01-17T09:42:08.5092897+01:00",
"lastAccessTime": "2020-04-10T17:29:29.9801436+02:00",
"annotations": {
"userName": "datta",
"timeSinceStartup": 259885750,
"ticksOfEvent": 637221365699906960
}
},
"activity":{
"probe": "FILERESOURCE_PROBE",
"status": "Changed",
"path": "C:\\Users\\datta",
"entityName": "eclipse",
"extension": "",
"attributes": "Directory",
"owner": "null",
"length": 0,
"isReadOnly": false,
"creationTime": "2020-01-17T09:42:08.5083+01:00",
"lastWriteTime": "2020-01-17T09:42:08.5083+01:00",
"lastAccessTime": "2020-04-10T17:29:29.9922013+02:00",
"annotations": {
"userName": "datta",
"timeSinceStartup": 259885765,
"ticksOfEvent": 637221365699922013
}
}
}
我想将它们加载到python程序中。目前,我正在使用logData = json.load(logfile)
加载它,但问题是当我这样做时,它返回了一个只有上一个“活动”键的python字典,其余的“活动”键却被覆盖。我不知道如何加载所有这些。如果你们能帮助我,我将不胜感激。谢谢。
具有相同键使用不同内容的对象看起来很奇怪,在这种情况下,获取对象数组可能更有意义。但是,假设您无法控制它,则必须对传入的数据执行“其他操作”,并且不要不将键/值对拆包到映射对象中。您可以通过注册传递对的json.load()
来告诉json.load()
如何处理这些对,返回的将成为相应的python对象。例如:
object_pairs_hook
并且以logdata = json.load(logfile, object_pairs_hook=tuple)
代替dict
(这是默认设置)。