如何定义字典,其值显示的类型应该是属性,哪个名称用作键?



我正在研究应用程序,它应该验证JSON。属性是不同类型的(数字、字符串、日期),这就是为什么我不仅要验证属性的存在,还要验证它们的值是否为所需类型的原因。

这就是为什么我想定义字典,其中键将是属性的名称,值将是该属性应该属于的类型(使用操作符isinstance或其他方式)。但是我不知道如何在Python中实现它。像这样:

map_of_property_to_classes: Dict[str, any]
class_name = map_of_property_to_classes["property_name"]
print(isinstance("property_name", class_name))
谁能给点提示吗?

你在寻找类似下面的东西吗?

from typing import Dict

def validate(data: Dict, meta_data: Dict) -> None:
for k, v in data.items():
if isinstance(v, meta_data[k]):
print('OK')
else:
print(f'{v} must be of type {meta_data[k]}')

_data = {'x': 12, 'name': 12}
_meta_data = {'x': int, 'name': str}
validate(_data,_meta_data)

输出
OK
12 must be of type <class 'str'>

我不确定这是否回答你的问题,但我写了一个脚本,读取JSON文件并返回字典。

JSON文件:

"Config":{
"programming_languages" : {"_type" : "dict", "value" :  {
"py"    : "python",
"js"    : "javascript",
"txt"   : "plain",
"md"      : "markdown",
"cs"      : "csharp"
}},
"noEditTypes": {"_type" : "set", "value" : ["pdf", "jpg", "jpeg", "png"]}
}

下面是python代码:

@staticmethod
def configParser():
with open("data/data.json", "r") as f:
data = json.load(f).get("Config")
outData = {}
for i in data:
valTypeName = data[i].get("_type")
if valTypeName == "set":
valType = set
elif valTypeName == "str":
valType = str
elif valTypeName == "int":
valType = int
elif valTypeName == "list":
valType = list
elif valTypeName == "dict":
valType = dict
else:
raise Exception("Unknown Type: {}".format(valTypeName))
valvalue = data[i].get("value")
outData[i] = valType(valvalue)
return outData

我认为如果你稍微修改一下这段代码,它也会为你的预期用途工作。

最新更新