Ho cercato nel documento ufficiale this per trovare la differenza tra json.dump() e json.dumps() in python. È chiaro che sono correlati all'opzione di scrittura dei file.
Ma qual è la differenza dettagliata tra loro e in quali situazioni uno ha più vantaggio rispetto ad altri?Qual è la differenza tra json.dump() e json.dumps() in python?
risposta
Non c'è altro da aggiungere se non quello che dicono i documenti, se si desidera eseguire il dump del JSON in un file/socket o qualsiasi altra cosa, si consiglia di andare su dump()
. Se avete solo bisogno come una stringa (per la stampa, l'analisi o qualsiasi altra cosa) quindi utilizzare dumps()
(stringa discarica)
Come menzionato da Antii Haapala in this answer, ci sono alcune piccole differenze sul comportamento ensure_ascii
, questo è in gran parte a causa di come il sottostante La funzione write()
funziona, poiché funziona in blocchi anziché nell'intera stringa, controlla la risposta per ulteriori dettagli.
json.dump()
Serialize obj come un flusso JSON formattato fp (un .write() - sostenere file come oggetto
Se ensure_ascii è falso, alcuni pezzi scritti fp possono essere casi in unicode
json.dumps()
obj Serialize ad una str JSON formattato
Se ensure_ascii è falso, il risultato può contenere caratteri non-ASCII e il valore di ritorno può essere un esempio unicode
Le funzioni con un s
parametri take stringa. Gli altri prendono i file flussi.
Una differenza notevole in Python 2 è che se si sta utilizzando ensure_ascii=False
, dump
scriverà correttamente UTF-8 dati codificati nel file (a meno che non si è utilizzato stringhe a 8 bit con caratteri estesi che non sono UTF-8):
dumps
d'altra parte, con ensure_ascii=False
può produrre un str
o unicode
solo a seconda di quali tipi che hai usato per le stringhe:
Serialize obj ad una str JSON formattato con questa tabella di conversione . Se ensure_ascii è False, il risultato potrebbe contenere caratteri non ASCII e il valore restituito potrebbe essere un'istanza.
(sottolineatura mia). Si noti che potrebbe anche essere un'istanza str
.
Quindi non è possibile utilizzare il suo valore di ritorno per salvare la struttura in un file senza verificare quale formato è stato restituito ed è possibile giocare con unicode.encode
.
Questo ovviamente non è più un problema valido in Python 3, poiché non c'è più questa confusione a 8 bit/Unicode.
Per quanto riguarda load
vs loads
, load
considera il file intera essere un documento JSON, quindi non è possibile utilizzarlo per leggere più di nuova riga documenti JSON limitati da un singolo file.
- 1. Qual è la differenza tra json.dumps e json.load?
- 2. Qual è la differenza tra json.dumps/loads e tornado.escape.json_encode/json_decode?
- 3. Qual è la differenza tra Python attivo e Python?
- 4. In Python, qual è la differenza tra pass e return
- 5. Qual è la differenza tra lista e lista [:] in python?
- 6. Qual è la differenza tra letterale e variabili in Python?
- 7. qual è la differenza tra l'os.open e os.fdopen in python
- 8. Qual è la differenza tra% i e% d in Python?
- 9. Qual è la differenza tra liste e tuple in Python?
- 10. In python, qual è la differenza tra random.uniform() e random.random()?
- 11. In Python, qual è la differenza tra ".append()" e "+ = []"?
- 12. Qual è la differenza tra heapq e PriorityQueue in python?
- 13. Qual è la differenza tra random.normalvariate() e random.gauss() in python?
- 14. Qual è la differenza tra dict() e {}?
- 15. Qual è la differenza tra __add__ e __concat__ di Python?
- 16. Twisted (Python) - qual è la differenza tra cooperare e coiterare?
- 17. Qual è la differenza tra pytz e python-dateutil?
- 18. Python: Qual è la differenza tra __builtin__ e __builtins__?
- 19. Qual è la differenza tra = e: =
- 20. Qual è la differenza tra `##` e `hashCode`?
- 21. qual è la differenza tra:.! e: r !?
- 22. Qual è la differenza tra Verilog! e ~?
- 23. Qual è la differenza tra ("") e (null)
- 24. Qual è la differenza tra? : e ||
- 25. qual è la differenza tra [[], []] e [[]] * 2
- 26. Qual è la differenza tra $ e $$?
- 27. Qual è la differenza tra " " e ""?
- 28. Qual è la differenza tra {0} e ""?
- 29. Qual è la differenza tra {0} e +?
- 30. Qual è la differenza tra .ToString() e + ""
Tutto il testo creato in un oggetto stringa python è unicode, ma è sicuro assumerlo genericamente? vale a dire quando si carica il contenuto da un file? –
@ JoãoGonçalves significa che non è possibile combinare dati binari con il testo in modo che Python lo approvi in modo silenzioso. per esempio. 'json.dumps ([b'123 '])' -> 'TypeError'. –
@ JoãoGonçalves notano anche che le stringhe nei documenti JSON ** devono essere Unicode ** e ** devono essere ** in qualsiasi UTF-8, UTF-16 o UTF-32 in base a RFC 7159 –