Exercise: Write User Records To JSON File#
Plan#
Lets add more functionality to our userdb
module. In
Exercise: Split Strings To User Dictionaries, we have read user records of the form
{
'id': 666, # <-- int
'firstname': 'Jörg',
'lastname': 'Faschingbauer',
'birth': '1966-06-19',
}
Now, given that we can have a list - an iterable to be exact - of
such records, lets write them out in JSON format (see here, watch out for
functions like load()
, loads()
, dump()
, and dumps()
).
Again, download the test below which contains the requirements. Read
carefully, and note that the function writes the user records to
something that looks like a file (the test uses io.StringIO
which
is not a file but behaves like one).
import userdb
import io
import json
def test_write_users_to_json():
users_out = [
{
'id': 666,
'firstname': 'Jörg',
'lastname': 'Faschingbauer',
'birth': '1966-06-19',
},
{
'id': 42,
'firstname': 'Caro',
'lastname': 'Faschingbauer',
'birth': '1997-04-25',
},
{
'id': 7,
'firstname': 'Johanna',
'lastname': 'Faschingbauer',
'birth': '1995-06-11',
},
{
'id': 1024,
'firstname': 'Philipp',
'lastname': 'Lichtenberger',
'birth': '1986-04-06',
},
]
output = io.StringIO() # <-- file-like, for output
userdb.write_users_to_json(users_out, output)
input = io.StringIO(output.getvalue()) # <-- file-like, for input
users_in = json.load(input)
assert users_out[0] == users_in[0]
assert users_out[1] == users_in[1]
assert users_out[2] == users_in[2]
assert users_out[3] == users_in[3]