xmltodict does not return a list for one element

前端 未结 3 659
轮回少年
轮回少年 2021-01-17 10:18

The following Code produces an error, if there is only one \"car\" in \"garage\":

import xmltodict

mydict = xmltodict.parse(xmlstringResults)    
for carsIn         


        
3条回答
  •  执念已碎
    2021-01-17 10:38

    I am using the combination of

    1)

    json_dict = xmltodict.parse(s, force_list={'item'})
    

    And

    2)

    # Removes a level in python dict if it has only one specific key
    # 
    # Examples: 
    # recursive_skip_dict_key_level({"c": {"a": "b"}}, "c")  # -> {"a", "b"}
    # recursive_skip_dict_key_level({"c": ["a", "b"]}, "c") # -> ["a", "b"]
    #
    def recursive_skip_dict_key_level(d, skipped_key):
        if issubclass(type(d), dict):
            if list(d.keys()) == [skipped_key]:
                return recursive_skip_dict_key_level(d[skipped_key], skipped_key)
            else:
                for key in d.keys():
                    d[key] = recursive_skip_dict_key_level(d[key], skipped_key)
                return d
        elif issubclass(type(d), list):
            new_list = []
            for e in d: 
                new_list.append(recursive_skip_dict_key_level(e, skipped_key))
            return new_list
        else: 
            return d
    
    
    # Removes None values from a dict
    # 
    # Examples: 
    # recursive_remove_none({"a": None})  # -> {}
    # recursive_remove_none([None]) # -> []
    #
    def recursive_remove_none(d):
        if issubclass(type(d), dict):
            new_dict = {}
            for key in d.keys():
                if not (d[key] is None):
                    new_dict[key] = recursive_remove_none(d[key])
            return new_dict
        elif issubclass(type(d), list):
            new_list = []
            for e in d: 
                if not (e is None):
                    new_list.append(recursive_remove_none(e))
            return new_list
        else: 
            return d       
    
    
    json_dict = recursive_skip_dict_key_level(json_dict, "item")
    json_dict = recursive_remove_none(json_dict)
    

    to interpret any "item" XML-elements as lists.

提交回复
热议问题