代码之家  ›  专栏  ›  技术社区  ›  nrs

如何验证json的结构?

  •  0
  • nrs  · 技术社区  · 8 年前

    这是我的数据:

    [{'DeviceInstanceId': 1, 'IsResetNeeded': False, 'ProductType': 'testing', 'Product': {'Family': '12345',"Model": "f10","Type": "data","Vendor": "qspi"}}]
    

    我想验证结构、类型和键是否与下面的顺序相同,如果不是,我应该打印缺失的数据

    'Product': {'Family': '12345',"Model": "f10","Type": "data","Vendor": "qspi"}
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   anandsp    8 年前

    假设这是转换为python字典的json

    ordered\u dict=[{'DeviceInstanceId':1,'IsResetNeeded':False,'ProductType':'testing','Product':{'Family':'12345','Model':“f10”,“Type”:“data”,“Vendor”:“qspi”}}]

    您可以使用ordered\u dict.keys()按顺序获取所有键,现在因为它是一个字典列表,所以您必须获取所有项的键并相互比较,以检查所有键是否按顺序排列,我正在转换为元组的元组进行比较。

    tuple_of_keys = tuple([tuple(j.keys()) for j in ordered_dict])
    

    这将为您提供一组组密钥。

    现在做一组元组,比如,

    if len(set(tuple_of_keys)) == 1:
        print("all keys are in order")
    else:
        print("missing data")
    

    如果长度等于1,则所有键的顺序相同

    要比较产品密钥中的密钥,请将代码更改为

    tuple_of_keys = tuple([tuple(j['Product'].keys()) for j in ordered_dict])
    

    并再次遵循相同的方法

    如果要手动传递密钥顺序并检查顺序是否匹配,请使用以下代码。

    order_of_keys = ('Vendor', 'Model', 'Type', 'Family')
    
    ordered_dict = [{'DeviceInstanceId': 1, 'IsResetNeeded': False, 
    'ProductType': 'testing', 'Product': {'Family': '12345',"Model": 
    "f10","Type": "data","Vendor": "qspi"}},{'DeviceInstanceId': 1, 
    'IsResetNeeded': False, 'ProductType': 'testing', 'Product': {'Family': 
    '12345',"Model": "f10","Type": "data","Vendor": "qspi"}}]
    
    
    def tests(order_of_keys,ordered_dict):
        tuple_of_keys = tuple([tuple(j['Product'].keys()) for j in ordered_dict])
        for each_item in tuple_of_keys:
            if each_item == order_of_keys:
                print("all keys are in order")
            else:
                print("missing data")
    tests(order_of_keys,ordered_dict)