Найти - Пользователи
Полная версия: Json в csv
Начало » Python для новичков » Json в csv
1
Firik
Необходимо из файла json выдрать названия всех вершин и вывести их в определенном виде в csv.
Например:
Имеем такой файл
{
"dataset": [
{
"id":
{
"$oid": "asd1dad333fgdg5wg2"
},
"theme": "all",
"publisher": {
"name": "ORNL_DAAC",
"subOrganizationOf": {
"name": "National Aeronautics and Space Administration",
"subOrganizationOf": {
"name": "U.S. Government"
}
}
}
},
{
"id":
{
"$oid": "sd2g54g548kd"
},
"publisher": {
"name": "ORN_AAC",
"subOrganizationOf": {
"name": "DPUI"
}
}
}
]
}
результат должен быть в виде строки, где в каждой ячейке должна быть запись такого вида:
"id/$oid", "publisher/name", "publisher/subOrganizationOf/name", "publisher/subOrganizationOf/subOrganizationOf/name"
Вывести все уникальные записи не сложно, сложно сделать в таком виде.
Проблема в том, что структура каждого блока отличается. Идея в том, чтобы обойти каждый блок и сохранить уникальную запись в список, который потом уже и выводить в csv. На текущий момент не получается обойти эти блоки, да и записи то вывести тоже, поэтому вопрос - это вообще возможно? Или же json должен быть структурирован одинаково? Копал в сторону обхода дерева в глубину, но адаптировать не получается.
FishHook
Рекурсивный обход дерева, покажите ваш код который не получается.
Firik
Пробовал разобрать хотя бы первый блок, вывод неверный.
def get_first_row(input_object):
    global res_string
    if not isinstance(input_object, basestring):
        for x in input_object:
            res_string.append(x)
            if isinstance(input_object[x], basestring):
                break
            for y in input_object[x]:
                res_string.append(y)
                if isinstance(input_object[x][y], dict):
                    get_first_row(input_object[x][y])
                elif isinstance(input_object[x][y], basestring):
                    headers.append("/".join(res_string))
                    res_string = []
                    break
    else:
        headers.append(input_object)
    return sorted(headers)
Должно вывести как раз то, что в первом посте написал. Но выводит
"publisher/subOrganizationOf/subOrganizationOf/name", "name/name"
Запутался напрочь
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB