Python: konwersja listy słowników do formatu json


85

Mam listę słowników, wyglądających mniej więcej tak:

list = [{'id': 123, 'data': 'qwerty', 'indices': [1,10]}, {'id': 345, 'data': 'mnbvc', 'indices': [2,11]}]

i tak dalej. Na liście może znajdować się więcej dokumentów. Muszę przekonwertować je na jeden dokument JSON, który można zwrócić w butelce, i nie mogę zrozumieć, jak to zrobić. Proszę pomóż. Widziałem podobne pytania na tej stronie, ale nie mogłem zrozumieć tam rozwiązań.

Odpowiedzi:


124

użyj biblioteki JSON

import json
json.dumps(list)

przy okazji, możesz rozważyć zmianę listy zmiennych na inną nazwę, listjest to wbudowana funkcja do tworzenia listy, możesz otrzymać nieoczekiwane zachowanie lub jakiś błędny kod, jeśli nie zmienisz nazwy zmiennej.


1
W porządku. To tylko przykład i używam do tego nazwy mylist. Czy dumps () działa również dla list? Myślałem, że powinien być używany tylko do dyktowania.
Apoorv Ashutosh

Czy można zapisać plik jako JSON Column Array lub JSON Row Array?
Anoop Toffy

UWAGA: ponowne przypisywanie listy (list = [1,2,3]) powoduje konflikt z wbudowaną metodą list (). proszę pamiętaj.
nikhil swami

27
import json

list = [{'id': 123, 'data': 'qwerty', 'indices': [1,10]}, {'id': 345, 'data': 'mnbvc', 'indices': [2,11]}]

Napisz do pliku json:

with open('/home/ubuntu/test.json', 'w') as fout:
    json.dump(list , fout)

Przeczytaj plik Json:

with open(r"/home/ubuntu/test.json", "r") as read_file:
    data = json.load(read_file)
print(data)
#list = [{'id': 123, 'data': 'qwerty', 'indices': [1,10]}, {'id': 345, 'data': 'mnbvc', 'indices': [2,11]}]

UWAGA: ponowne przypisywanie listy (list = [1,2,3]) powoduje konflikt z wbudowaną metodą list (). proszę pamiętaj.
nikhil swami

1
response_json = ("{ \"response_json\":" + str(list_of_dict)+ "}").replace("\'","\"")
response_json = json.dumps(response_json)
response_json = json.loads(response_json)

2
Cześć! Chociaż może to rozwiązać problem OP, generalnie odradza się pisanie kodu tylko odpowiedzi na SO. Proszę podać wyjaśnienie, dlaczego jest to rozwiązanie problemu, ponieważ pomoże to OP lepiej zrozumieć i przyniesie korzyści przyszłym odwiedzającym witrynę. Dzięki!
d_kennetz

0

Aby przekonwertować go na pojedynczy słownik z określoną wartością kluczy, możesz użyć poniższego kodu.

data = ListOfDict.copy()
PrecedingText = "Obs_"
ListOfDictAsDict = {}
for i in range(len(data)):
    ListOfDictAsDict[PrecedingText + str(i)] = data[i]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.