我有一个“复杂”(嵌套了未定义的深度和包含列表)json字典,它存储我的项目的配置设置,该文件的片段:
{
"system_configuration": {
"SYSLOGD_ARGS":"-n -O /var/log/messages"
, "KLOGD_ARGS":"-n"
, "dbus": {
"location":"/usr/share/dbus-1/system.d/ab.conf"
, "services": [
"com.stezza.ab"
, "com.stezza.keyboard"
, "com.stezza.mpd"
, "com.stezza.remote"
, "com.stezza.volume" ]
}
, "wpa_supplicant": {
"location": "/etc/wpa_supplicant.conf"
, "ctrl_interface": "/var/run/wpa_supplicant"
, "update_config": "1"
, "network": [
{ "ssid": "OpenWrt"
, "psk": "f22da64fa33936391b0ace4d544c63c5b340877327d31ad028296c875c0d8adb" }
, { "ssid": "SecondNetwork"
, "psk": "f22da64fa33936391b0ace4d544c63c5b340877327d31ad028296c875c0d8adb" } ]
}
}
我将json文件加载到Python中的字典中。
考虑到这样的路径,适当的方法是什么:
(背景,可能不相关,这条路径将通过一个烧瓶<path:>
-url来找我,作为RESTful API的一部分)
我正在考虑拆分路径,循环遍历它并检查类型是否是列表来处理列表,但我觉得可能有更多“pythonic”方式来执行此操作。
由于您可以使用方括号对字典和列表编制索引,因此无需区分两者。 AFNP(请求宽恕,而非许可)是针对此类问题的pythonic方法。
keys = path.split("/")
acc = json_dict
for key in keys:
try:
acc = acc[key]
except TypeError, KeyError, IndexError:
acc = None
break
如果你希望总是在字典中找到条目,那么提高ValueError
而不是将acc
设置为None
会更有意义。 Python的Zen(导入这个)说你不应该让错误无声地传递,除非打算这样做。