To parse things as JSON and output using the built-in CSV module:
import urllib.request
import json
import csv
import sys
response = urllib.request.urlopen('http://api.sl.se/api2/deviations.html?key=...')
data = json.loads(response.read())
headers = ['Details', 'FromDateTime', 'UpToDateTime', 'Updated']
writer = csv.writer(sys.stdout) # write to standard output; use `python script.py > something.csv` to redirect
writer.writerow(headers)
for event in data.get('ResponseData', []):
writer.writerow([event.get(key) for key in headers])
This outputs e.g.
Details,FromDateTime,UpToDateTime,Updated
"Buss 748 trafikerar ej mellan Jovisgatan till Polhemsgatan pga vägarbete. Hållplatserna Jovisgatan och Polhemsgatan är därmed indragna. Resenärer hänvisas till alternativa linjer 751,753,758 Och 783. Detta gäller båda riktningar.
Gäller från och med 2019-10-01 kl 0:00 beräknas vara klart till 2019-12-13 kl 23:30 ",2019-10-01T00:00:00,2019-12-13T23:30:00,2019-09-26T07:40:08.47+02:00
"Hållplats Brottby trafikplats och Söderhalls trafikplats är tillfälligt flyttad till hållplats för 625 för blåbuss 676 mot Tekniska Högskolan och buss 639 mot Stockholm och 696 mot Tekniska Högskolan från och med 2019-09-23 på grund av vägarbete.
Detta planeras pågå måndag till fredag mellan kl. 21:00 - 05:00 till och med 2019-10-04.
Resande från Söderhall trafikplats riktning Stockholm hänvisas till andra sidan av motorvägen vid bussvändslingan vid pendlarslingan.
Resande från Brottby trafikplats riktning Stockholm hänvisas ombordstigning på bron över E18.",2019-09-23T21:00:00,2019-10-04T05:00:00,2019-09-22T08:44:31.783+02:00
etc.