我有一个示例Json,其中包含密钥作为fileName和值作为filepath。例如:
{
"sqlFiles":{
"sqlQueryPath": "tmp/r/test.sql"
},
"csvFiles": {
"firstSampleInput": "tmp/c/sample.csv",
"secondSampleInput": "tmp/c/sample1.csv"
}
}
,我有一个函数,将键作为输入,将返回值作为输出。像这样:
def readFilePath(key):
with open('filePaths.json', 'r') as f:
config = json.load(f)
value = config[key]
return value
如果密钥可以作为根元素使用,那么我的函数完全可以使用,但是如果密钥可以嵌套格式使用(就像json中可用),那么我的函数将失败。
我将使用json路径调用该函数,如下所示:
readFilePath("sqlFiles.sqlQueryPath")
解析格式为config["sqlFiles"]["sqlQueryPath"]
的路径的函数需要进行哪些更改
答案 0 :(得分:2)
这是一种方法。使用简单的迭代。
演示:
key = "sqlFiles.sqlQueryPath"
def readFilePath(key):
config = {
"sqlFiles":{
"sqlQueryPath": "tmp/r/test.sql"
},
"csvFiles": {
"firstSampleInput": "tmp/c/sample.csv",
"secondSampleInput": "tmp/c/sample1.csv"
}
}
for i in key.split("."):
if i in config:
config = config[i]
else:
return None
return config
print(readFilePath(key))
答案 1 :(得分:1)
您需要用“。”分隔键。并迭代伪代码读取值:
for nestedKey in key.split('.'):
value = value[nestedKey]
答案 2 :(得分:0)
您可以尝试通过拆分输入并避免使用根键进行for循环
def readFilePath(key):
json_keys = key.split('.')
with open('filePaths.json', 'r') as f:
config = json.load(f)
if len(json_keys) > 1:
value = config[json_keys[0]][json_keys[1]]
else:
value = config[json_keys[0]]
return value
答案 3 :(得分:0)
您可以尝试一下,
def readFilePath(key):
with open('filePaths.json', 'r') as f:
config = json.load(f)
value = ""
config_temp = config
try:
for k in key.split("."):
config_temp = config_temp[k]
value = config_temp
return value
except KeyError:
return value
答案 4 :(得分:0)
这是一个解决方案:
def readFilePath(key):
with open("sample.json") as f:
config = json.load(f)
value = None
for k in key.split("."):
try:
value = config[k]
except KeyError:
config = value
return value[k]