我正在解析一个json文件,看起来像:my_json:
"DataChangedEntry": {
"CurrentValue": {
"RefId": {
"Value": "aaaaaaa"
获取"Value"它看起来像:
my_json["DataChangedEntry"]["CurrentValue"]["RefId"]["Value"]
我想把它发送到一个try/except函数(因为我有很多字段得到),但我不知道如何发送json对象。我试过:
get_value = my_function(my_json, ["DataChangedEntry"]["CurrentValue"]["RefId"]["Value"])
但是我得到错误:
TypeError: list indices must be integers or slices, not str
my_function就是
def my_function(json_prefix, json_field):
try:
value = json_prefix[json_field]
return value
except:
logging.exception('Exception: ')
您必须将每个键作为单独的参数(或作为单独的参数列表)传递。
def my_function(obj, *fields):
for f in fields:
try:
obj = obj[f]
except KeyError:
logging.exception("Exceptoin: ")
return
return obj
my_function(my_json, "DataChangedEntry", "CurrentValue", ...)
我承认将这些数据单独发送给函数的想法是完全不同的。
而是直接返回值aaaaaaa
:
- 发送第一个参数作为JSON对象值
- 发送第二个参数作为JSON对象名称字符串
- 发送第三个参数作为键列表
然后可以使用eval()
将字符串的并集转换为代码:
def my_function(json_full, json_prefix, json_field):
my_json = json_full
my_json_str = json_prefix
key_field = '["' + '"]["'.join(json_field) + '"]'
try:
value = eval(f'{json_prefix}{key_field}')
return value
except Exception as e:
return e
def main():
my_json = {
"DataChangedEntry": {
"CurrentValue": {
"RefId": {
"Value": "aaaaaaa"
},
},
},
}
get_value = my_function(my_json, 'my_json', ["DataChangedEntry","CurrentValue","RefId","Value"])
print(get_value)
if __name__ == "__main__":
main()
输出:
aaaaaaa