Przeszukałem w oficjalnym dokumencie this, aby znaleźć różnicę między json.dump() i json.dumps() w python. Oczywiste jest, że są one powiązane z opcją zapisu pliku.
Ale jaka jest szczegółowa różnica między nimi i w jakich sytuacjach ma się przewagę nad innymi?Jaka jest różnica między json.dump() i json.dumps() w python?
Odpowiedz
Nie ma prawie nic więcej do dodania innych niż to, co mówią doktorzy, jeśli chcesz zrzucić JSON do pliku/gniazda lub cokolwiek innego, to powinieneś pójść na dump()
. Jeśli tylko jest to potrzebne jako ciąg znaków (do drukowania, analizowania lub cokolwiek), a następnie użyć dumps()
(ciąg zrzutu)
Jak wspomniano przez Antii Haapala in this answer, istnieją pewne drobne różnice w zachowaniu ensure_ascii
, jest to głównie ze względu na to, jak bazowego Funkcja write()
działa, ponieważ działa w porcjach, a nie w całym ciągu, sprawdź odpowiedź, aby uzyskać więcej informacji na ten temat.
json.dump()
Serializować obj jako JSON sformatowane strumienia FP (A .write() - nośnej plikopodobny Przedmiotem
Jeśli ensure_ascii False, niektóre fragmenty napisane FP mogą unicode przypadki
json.dumps()
Serializować obj do JSON sformatowanym Str
Jeśli ensure_ascii jest False, wynik może zawierać znaków spoza ASCII i zwracana wartość może być Unicode instancję
Funkcje z s
parametrów odbioru smyczkowych. Inni pobierają strumienie plików .
Jedną z istotnych różnic w Python 2 jest to, że jeśli używasz ensure_ascii=False
, dump
będzie poprawnie napisać kodowanie UTF-8 danych do pliku (chyba że używany 8-bitowe ciągi znaków z rozszerzonego, które nie są w UTF-8):
dumps
z drugiej strony, z ensure_ascii=False
może produkować str
lub unicode
tylko w zależności od rodzaju, który wykorzystano do strun:
Serializować oBJ do JSON sformatowanym Str korzystających z tej tabeli konwersji . Jeśli parametr sure_ascii ma wartość False, wynik może zawierać znaki spoza ASCII, a wartość zwracana może być instancją
unicode
.
(podkreślenie moje). Zauważ, że nadal może to być instancja str
.
W ten sposób nie można użyć jego wartości zwracanej do zapisania struktury w pliku bez sprawdzenia, który format został zwrócony i prawdopodobnie odtwarzany z unicode.encode
.
To oczywiście nie jest już problemem w Pythonie 3, ponieważ nie ma więcej tego zamieszania 8-bitowego/Unicode.
chodzi o load
vs loads
, load
uważa plik cały być jeden dokument JSON, więc nie można go używać do odczytu wielu nowej linii ograniczone dokumentów JSON z pojedynczego pliku.
- 1. Jaka jest różnica między json.dumps/loads i tornado.escape.json_encode/json_decode?
- 2. Jaka jest różnica między? : i ||
- 3. Jaka jest różnica między $ i $$?
- 4. Jaka jest różnica między Image.resize i Image.thumbnail w Pillow-python
- 5. W python, jaka jest różnica między random.uniform() i random.random()?
- 6. Jaka jest różnica między sys i os.sys
- 7. Jaka jest różnica między = i: = w mysql?
- 8. Jaka jest różnica między! = I =! w Javie?
- 9. Jaka jest różnica między 'i "w PHP
- 10. Jaka jest różnica między! i !! w yaml?
- 11. jaka jest różnica między @ i @@ w module?
- 12. Jaka jest różnica między * i. * W Matlab?
- 13. Jaka jest różnica między | i || w MATLAB?
- 14. Jaka jest różnica między * i * | * w CSS?
- 15. Jaka jest różnica między pytz i python-dateutil?
- 16. Jaka jest różnica między System.Windows.Controls.Control i System.Windows.Forms.Control?
- 17. Jaka jest różnica między asersem i static_assert?
- 18. Jaka jest różnica między PropertyChangeListener i VetoableChangeListener?
- 19. Jaka jest różnica między Ja i Ja?
- 20. Jaka jest różnica między ATL i WTL?
- 21. Jaka jest różnica między FontMetrics.stringWidth() i FontMetrics.getStringBounds()?
- 22. Jaka jest różnica między "CompletionStage" i "CompletableFuture"?
- 23. Jaka jest różnica między CellClick i CellMouseClick?
- 24. Jaka jest różnica między ObjectResult i JsonResult
- 25. Jaka jest różnica między ssize_t i ptrdiff_t?
- 26. Jaka jest różnica między fn i fn *?
- 27. Jaka jest różnica między getMeasuredHeight i getHeight
- 28. Jaka jest różnica między beginTrackingWithTouch i touchBegan?
- 29. Jaka jest różnica między init() i window.init()?
- 30. Jaka jest różnica między WCF i WPF?
Cały tekst utworzony w obiekcie napisowym Python ma unikod, ale czy można go bezpiecznie założyć w sposób ogólny? tj. podczas ładowania zawartości z pliku? –
@ JoãoGonçalves oznacza to, że nie można mieszać danych binarnych z tekstem, aby python zatwierdzał je w trybie cichym. na przykład 'json.dumps ([b'123 '])' -> 'TypeError'. –
@ JoãoGonçalves również zauważyć, że ciągi w dokumentach JSON ** muszą być Unicode ** i ** muszą być ** w dowolnym UTF-8, UTF-16 lub UTF-32 zgodnie z RFC 7159 –