Python сглаживает многоуровневый JSON

Я пытаюсь преобразовать JSON в CSV-файл, который я могу использовать для дальнейшего анализа. Проблема, связанная с моей структурой, заключается в том, что при преобразовании файла JSON у меня есть довольно много вложенных dict /списков.

Я пытался использовать панд json_normalize(), но это только выравнивает первый уровень.

import json
import pandas as pd
from pandas.io.json import json_normalize
from cs import CloudStack

api_key = xxxx
secret = xxxx
endpoint = xxxx

cs = CloudStack(endpoint=endpoint,
                key=api_key,
                secret=secret)

virtual_machines = cs.virtMach()

test = json_normalize(virtual_machines["virtualmachine"])

test.to_csv("test.csv", sep="|", index=False)

Любая идея, как польстить всему файлу JSON, чтобы я мог создать однострочный ввод в файл CSV для одной записи (в данном случае виртуальной машины)? Я попробовал несколько решений, размещенных здесь, но мой результат всегда был только первый уровень был сглажен.

Это пример JSON (в этом случае я все еще получаю вывод «securitygroup» и «nic» в формате JSON:

{
    "count": 13,
    "virtualmachine": [
        {
            "id": "1082e2ed-ff66-40b1-a41b-26061afd4a0b",
            "name": "test-2",
            "displayname": "test-2",
            "securitygroup": [
                {
                    "id": "9e649fbc-3e64-4395-9629-5e1215b34e58",
                    "name": "test",
                    "tags": []
                }
            ],
            "nic": [
                {
                    "id": "79568b14-b377-4d4f-b024-87dc22492b8e",
                    "networkid": "05c0e278-7ab4-4a6d-aa9c-3158620b6471"
                },
                {
                    "id": "3d7f2818-1f19-46e7-aa98-956526c5b1ad",
                    "networkid": "b4648cfd-0795-43fc-9e50-6ee9ddefc5bd"
                    "traffictype": "Guest"
                }
            ],
            "hypervisor": "KVM",
            "affinitygroup": [],
            "isdynamicallyscalable": false
        }
    ]
}

Спасибо и всего наилучшего, Bostjan

4 голоса | спросил Bostjan 16 J000000Monday18 2018, 13:31:54

1 ответ


0
Благодаря gyx-hh это было решено:Я использовал следующую функцию (подробности можно найти здесь ):К сожалению, это полностью сглаживает весь JSON, а это означает, что если у вас многоуровневый JSON (много вложенных словарей), он может сгладить все в одну строку с тоннами столбцов.В конце концов я использовал ---- +: = 1 =: + ---- и определил структуру, которая мне требовалась.Хороший пример того, как это сделать, можно найти здесь .Надеюсь, это кому-то поможет, и еще раз спасибо gyx-hh за решениеС уважением
ответил Bostjan 17 J000000Tuesday18 2018, 13:23:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132