Python Language `load` vs` loads`, `dump` vs` dumps`

Esempio

Il modulo json contiene funzioni sia per la lettura e la scrittura da e verso le stringhe Unicode, sia per la lettura e la scrittura da e verso i file. Questi sono differenziati da un trailing s nel nome della funzione. In questi esempi utilizziamo un oggetto StringIO, ma le stesse funzioni si applicherebbero a qualsiasi oggetto simile a un file.

Qui usiamo le funzioni basate su stringhe:

import json

data = {u"foo": u"bar", u"baz": []}
json_string = json.dumps(data)
# u'{"foo": "bar", "baz": []}'
json.loads(json_string)
# {u"foo": u"bar", u"baz": []}

E qui usiamo le funzioni basate su file:

import json

from io import StringIO

json_file = StringIO()
data = {u"foo": u"bar", u"baz": []}
json.dump(data, json_file)
json_file.seek(0)  # Seek back to the start of the file before reading
json_file_content = json_file.read()
# u'{"foo": "bar", "baz": []}'
json_file.seek(0)  # Seek back to the start of the file before reading
json.load(json_file)
# {u"foo": u"bar", u"baz": []}

Come puoi vedere, la differenza principale è che quando si scaricano dati json è necessario passare l'handle del file alla funzione, invece di acquisire il valore restituito. Vale anche la pena notare che è necessario cercare all'inizio del file prima di leggere o scrivere, al fine di evitare la corruzione dei dati. Quando si apre un file, il cursore si trova nella posizione 0 , quindi anche il seguente funzionerà:

import json

json_file_path = './data.json'
data = {u"foo": u"bar", u"baz": []}

with open(json_file_path, 'w') as json_file:
    json.dump(data, json_file)

with open(json_file_path) as json_file:
    json_file_content = json_file.read()
    # u'{"foo": "bar", "baz": []}'

with open(json_file_path) as json_file:
    json.load(json_file)
    # {u"foo": u"bar", u"baz": []}

Avere entrambi i modi di gestire i dati json consente di lavorare in modo idiomatico ed efficiente con i formati basati su json, come ad esempio json-per-line di pyspark :

# loading from a file
data = [json.loads(line) for line in open(file_path).splitlines()]

# dumping to a file
with open(file_path, 'w') as json_file:
    for item in data:
        json.dump(item, json_file)
        json_file.write('\n')