Строку преобразить в словарь
Имеется строка такого вида:
import json
import ast
s='''
{
"VM": "b17592fe-cd14-4462-aba0-decf35677b4a",
"Name": "backup-vm",
"CPU Name": null,
"CPU Speed": null,
"CPU Architecture": "x86_64",
"CPU Cores": 1,
"RAM": 1073741824,
"State": "up",
"Disks": [
{
"Name": "bk",
"Description": "none",
"Format": "cow",
"Size": 53689188352
}
]
},
{
"VM": "7035097b-84ee-41c4-8a0b-7cec405d2d8b",
"Name": "chill_vm",
"CPU Name": null,
"CPU Speed": null,
"CPU Architecture": "x86_64",
"CPU Cores": 1,
"RAM": 1073741824,
"State": "down",
"Disks": []
},
{
"VM": "ceb1f243-ce53-4cc2-acb6-767e40f52659",
"Name": "HostedEngine",
"CPU Name": null,
"CPU Speed": null,
"CPU Architecture": "x86_64",
"CPU Cores": 2,
"RAM": 4294967296,
"State": "up",
"Disks": [
{
"Name": "he_virtio_disk",
"Description": "Hosted-Engine disk",
"Format": "raw",
"Size": 85899345920
}
]
},
{
"VM": "6bc577cb-a92c-4bbd-9973-34186ce2ee42",
"Name": "kek_vm",
"CPU Name": null,
"CPU Speed": null,
"CPU Architecture": "x86_64",
"CPU Cores": 1,
"RAM": 1073741824,
"State": "down",
"Disks": []
},
{
"VM": "c2f04f6c-5da5-41b5-9d4a-a0a3a054fb05",
"Name": "os_enc",
"CPU Name": null,
"CPU Speed": null,
"CPU Architecture": "x86_64",
"CPU Cores": 1,
"RAM": 1073741824,
"State": "down",
"Disks": []
},
{
"VM": "34f48d6c-e174-4931-a48e-691fac3218a4",
"Name": "Server-IPA",
"CPU Name": null,
"CPU Speed": null,
"CPU Architecture": "x86_64",
"CPU Cores": 1,
"RAM": 1073741824,
"State": "down",
"Disks": [
{
"Name": "Server-IPA_Disk1",
"Description": "none",
"Format": "raw",
"Size": 53687091200
}
]
},
{
"VM": "aa9fb932-6be5-4c59-b97b-3bfbb12b600c",
"Name": "test_vm",
"CPU Name": null,
"CPU Speed": null,
"CPU Architecture": "x86_64",
"CPU Cores": 1,
"RAM": 1073741824,
"State": "down",
"Disks": [
{
"Name": "wizard",
"Description": "none",
"Format": "cow",
"Size": 10737418240
}
]
}
'''
f=ast.literal_eval(s)
print(f)
Ошибка такие:
f=ast.literal_eval(s)
Traceback (most recent call last):
File "/home/alex/src/rv-vm-backup-dev/tt.py", line 111, in <module>
f=ast.literal_eval(s)
File "/usr/lib/python3.10/ast.py", line 62, in literal_eval
node_or_string = parse(node_or_string.lstrip(" \t"), mode='eval')
File "/usr/lib/python3.10/ast.py", line 50, in parse
return compile(source, filename, mode, flags,
File "<unknown>", line 20
{
^
SyntaxError: invalid syntax
или если через json.loads
Traceback (most recent call last):
File "/home/alex/src/rv-vm-backup-dev/tt.py", line 111, in <module>
f=json.loads(s)
File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.10/json/decoder.py", line 340, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 19 column 2 (char 383)
Как такую строку преобразовать в словарь?
Источник: Stack Overflow на русском