Raspberry Pi: JSON in Datei speichern

bongo

Lt. Junior Grade
Registriert
Sep. 2007
Beiträge
314
Hallo zusammen,

eins vorab: Ich habe wenig Ahnung vom Programmieren und speziell python...

Ich möchte stündlich eine Webseite abrufen, die JSON-Daten liefert. Diese sollen dann einfach in eine Textdatei geschrieben und später bei Bedarf in eine csv-Datei konvertiert werden.

Ich benötige also ein script, welches über einen cronjob stündlich die Webseite abruft und dann die empfangenen Daten zu einer Textdatei auf dem Raspberry Pi hinzufügt.

Wenn ich den Link manuell in einem Browser aufrufe, erscheinen die JSON-Daten, aber ich habe eben keinen Plan, wie ich das in eine Datei bekomme.

Das braucht mir keiner vorkauen, aber ein Link zu einem brauchbaren Anfänger-Tutorial würde sehr helfen.
 
Ich denke, so einfach geht es nicht. Der Befehle von kann aber lauten:

wget https://webseite.de -O datei.txt -o /dev/null

oder einfach mal wget --help aufrufen
 
  • Gefällt mir
Reaktionen: Der Lord und Krik
Ich lasse mir gerade von Copilot helfen. Ich hätte nicht gedacht, dass das so einfach ist. Copilot generiert ein Python-Skript.
 
@bongo Python und JSON sind wirklich ein gutes Gespann, das ist mit wenigen Zeilen erledigt. Falls du das Skript später teilst, können wir schauen ob es noch Verbesserungspotenzial gibt, z.B. für Fehlerbehandlung oder atomares Schreiben damit keine korrupten Dateien entstehen.
 
@Elan1338 Vielen Dank.

Das ist der Code. Leider liefern die JSON-Daten keinen Zeitstempel, deshalb musste Copliot auch da unterstützen.

Code:
import requests
import json
from datetime import datetime

url = "https://xxx"
response = requests.get(url)

# JSON in Python-Objekt umwandeln
data = response.json()

# Zeitstempel hinzufügen
data["timestamp"] = datetime.now().isoformat()

# Als JSON-Linie anhängen
with open("daten.jsonl", "a", encoding="utf-8") as f:
    f.write(json.dumps(data, ensure_ascii=False) + "\n")

Es wird jetzt pro Skriptaufruf eine Zeile an die Textdatei angefügt und der Zeitstempel in die JSON-Daten integriert. Scheint alles so zu sein, wie ich es benötige. Das würde ich dann auf den raspberry übertragen, in die crontab packen und fertig ist die Laube.
 
klar kann man auch python dafür benutzen, aber es geht auch mit einem einzeiler (vorher sudo apt install jq ausführen):

Code:
curl -s https://jsonplaceholder.typicode.com/todos/1 | jq -c '. + {timestamp: (now | todateiso8601)}' >> out.json

lädt das json runter, fügt noch einen timestamp hinzu und hängt es als eine zeile an eine datei an.
 
Danke. Funktioniert auch. Ich musste allerdings um die URL noch Anführungszeichen setzen, da ich noch ein Ampersand drin hatte. Hat eine der beiden Varianten Vorteile?

Kann man den Timestamp auch auf local time umstellen? Der ist momentan auf UTC.

Code:
Local time: Sun 2026-03-15 12:20:13 CET
Universal time: Sun 2026-03-15 11:20:13 UTC
RTC time: n/a
Time zone: Europe/Berlin (CET, +0100)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

EDIT: Ich bin auf einen Bot hereingefallen? 🤦‍♂️
 
Zuletzt bearbeitet:
"todateiso8601" aus jq benutzt immer utc. wenn man an der stelle was anderes will, kann man z.b. "date" benutzen:

Code:
curl -s https://jsonplaceholder.typicode.com/todos/1 | jq -c ". + {timestamp: \"$(date --iso-8601=seconds)\"}" >> out.json
 
bongo schrieb:
Ich lasse mir gerade von Copilot helfen. Ich hätte nicht gedacht, dass das so einfach ist. Copilot generiert ein Python-Skript.
Nimm lieber Claude.ai

Copilot ist doch sehr begrenzt
 
Danke. Schaue ich mir für das nächste Mal an. Die Aufgabe war ja anscheinend recht simpel. Das was CoPliot rausgehauen hat, funktioniert.
 
Zurück
Oben