четверг, 10 января 2019 г.

Парсинг структуры json файлов с помощью Python


Возникла задача: нужно загрузить в базу данных все данные из json файлов. Иерархия и состав атрибутов неизвестен, типы данных - тоже. Следующий скрипт позволяет построить набор уникальных веток дерева среди всех найденных вариантов в виде разрозненных списков. Сканируются все файлы в заданной директории. 

В дальнейшем планируется доработать скрипт и выводить иерархию, а не списки, и указывать тип данных с минимальной и максимальной длиной содержимого.

import json
import io
import os

directory = 'E:\\foldername'


jstruct = {}

def dict_generator(indict, pre=None):
    pre = pre[:] if pre else []
        if isinstance(indict, dict):
            for key, value in indict.items():
                if isinstance(value, dict):
                    for d in dict_generator(value, [key] + pre):
                        yield d
                elif isinstance(value, list) or isinstance(value, tuple):
                    for v in value:
                        for d in dict_generator(v, [key] + pre):
                            yield d
                else:
                    yield pre + [key, value]
        else:
            yield indict


for file in os.listdir(directory):
    filename = os.fsdecode(file)
    if filename.endswith(".txt"):
         with io.open(os.path.join(directory, filename), encoding='utf-8') as json_file: 
             data = json.load(json_file)
         new = {tuple(x[:-1]): x[:-1] for x in dict_generator(data)}

         jstruct.update(new)
         continue
    else:
         continue


for val in jstruct.values():
    print(val)

Комментариев нет:

Отправить комментарий