如何在Python中支持相同JSON数据的不同配置?
我试图从一些JSON数据中获取一个值。存储值的键可以不同。我想支持这两个版本 我尝试过使用条件语句来检查系统可能运行的版本如何在Python中支持相同JSON数据的不同配置?,json,python-3.x,Json,Python 3.x,我试图从一些JSON数据中获取一个值。存储值的键可以不同。我想支持这两个版本 我尝试过使用条件语句来检查系统可能运行的版本 if csv_json['com.revl.fileutils.LocalFileRef']['path'] != None : csv_path = csv_json['com.revl.fileutils.LocalFileRef']['path'] else: csv_path = csv_json['path'] 如果我在与csv_json['co
if csv_json['com.revl.fileutils.LocalFileRef']['path'] != None :
csv_path = csv_json['com.revl.fileutils.LocalFileRef']['path']
else:
csv_path = csv_json['path']
如果我在与csv_json['com.revl.fileutils.LocalFileRef']['path']
格式兼容的系统上运行上述代码,那么一切都正常。如果我在一个支持csv\u json['path']
格式的系统上运行它,那么它会失败
File "main.py", line 51, in <module>
main()
File "main.py", line 38, in main
if csv_json['path'] != None :
KeyError: 'path'
文件“main.py”,第51行,在
main()
文件“main.py”,第38行,在main中
如果csv_json['path']!=无:
KeyError:“路径”
当然,如果我翻转条件,我会得到相反的结果。试试看
if 'com.revl.fileutils.LocalFileRef' in csv_json:
或者更好:
local_file_ref = csv_json.get('com.revl.fileutils.LocalFileRef')
if local_file_ref:
csv_path = local_file_ref['path']
else:
csv_path = csv_json['path']
如果找不到键,dict
的.get()
方法将返回None
(或作为第二个参数传递的可选默认值)
单行程序版本可以是:
csv_path = (csv_json.get('com.revl.fileutils.LocalFileRef') or csv_json)['path']
试一试
或者更好:
local_file_ref = csv_json.get('com.revl.fileutils.LocalFileRef')
if local_file_ref:
csv_path = local_file_ref['path']
else:
csv_path = csv_json['path']
如果找不到键,dict
的.get()
方法将返回None
(或作为第二个参数传递的可选默认值)
单行程序版本可以是:
csv_path = (csv_json.get('com.revl.fileutils.LocalFileRef') or csv_json)['path']