Exemplo n.º 1
0
def hdf2dict(hdf_as_str):
    """
    Usage
    >>> json_data = hdf2json('''artists {
    ... 0 {
    ... name = Persuader, The
    ... }
    ... }
    ... title = Stockholm
    ... labels {
    ... 0 {
    ... name = Svek
    ... catno = SK032
    ... }
    ... }''')
    """

    if not isinstance(hdf_as_str, basestring):
        raise ValueError('argument must be a string')

    hdf_obj = HDF()
    hdf_obj.readString(hdf_as_str)

    node = hdf_obj

    def traverse_node(node):
        dict_part = {}
        list_part = []

        while node and node.name().isdigit():
            if node.value():
                list_part.append(node.value())
            else:
                list_part.append(traverse_node(node.child()))
            node = node.next()

        if list_part:
            return list_part

        while node:
            if node.value() is not None and not node.child():
                val = node.value()
                dict_part[node.name()] = val
            else:
                dict_part[node.name()] = traverse_node(node.child())
            node = node.next()

        return dict_part

    return traverse_node(node.child())