Jaka jest różnica między json.dumps i json.load? [Zamknięte]

143

Jaka jest różnica między json.dumpsi json.load?

Z mojego zrozumienia jeden ładuje JSON do słownika, a inny ładuje do obiektów.

AnMaree
źródło

Odpowiedzi:

190

dumps pobiera obiekt i tworzy ciąg:

>>> a = {'foo': 3}
>>> json.dumps(a)
'{"foo": 3}'

load wziąłby obiekt plikopodobny, odczytałby dane z tego obiektu i użyłby tego ciągu do stworzenia obiektu:

with open('file.json') as fh:
    a = json.load(fh)

Należy pamiętać, że dumpi loadkonwersji pomiędzy plikami i obiektami, podczas dumpsi loadskonwertować między ciągi i obiektów. Możesz myśleć o sfunkcjach -less jako o opakowaniach wokół sfunkcji:

def dump(obj, fh):
    fh.write(dumps(obj))

def load(fh):
    return loads(fh.read())
Chepner
źródło
Jest to bardzo pomocne dla mojego zrozumienia. Nadal jestem trochę zdezorientowany, ponieważ myślałem, że wszystko jest obiektem w Pythonie. Czy łańcuch nie byłby obiektem sam w sobie? Jak wtedy mógłbyś nawrócić się między tymi dwoma? Przepraszam za głupie pytanie.
Bowen Liu
Używam objectw znaczeniu „czegoś innego niż str”. Łańcuch taki jak '"foo"'jest dekodowany do obiektu Pythona ; ciąg taki jak jest dekodowany do listy Pythona itp.str'foo'"[1,2,3]"[1,2,3]
chepner
dumps()- kodowanie do obiektów JSON dump()- zakodowany ciąg znaków zapisany w pliku loads()- dekodowanie ciągu JSON load()- dekodowanie podczas odczytu pliku JSON
Jamil Noyda
74

json load -> zwraca obiekt z ciągu znaków reprezentujących obiekt json.

json dumps -> zwraca ciąg znaków reprezentujący obiekt json z obiektu.

załaduj i zrzuć -> czytaj / zapisuj z / do pliku zamiast ciągu

stackhelper101
źródło
10
> json dumps -> zwraca ciąg znaków reprezentujący obiekt json z dyktu. To blisko, ale nie musi to być dykt, który przekazujesz do json.dumps (). Możesz przekazać listę, ciąg znaków lub wartość logiczną ...
Ross