Sponsor-Board.de

Normale Version: JSON zu SQL
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag liebe Community,

Heute stoße ich mal wieder auf ein Problem, das sicher nicht so einfach zu lösen ist, da ich leider zu wenig Informationen zu dem Thema finde.

Es geht um Folgendes.

Ich habe eine .json Datei, in die immer wieder ein Wert geschrieben wird. Dieser Inhalt sieht wie folgt aus.

Code:
[{"raspid":"1","DateTime":"08-14-01","Temperatur":"27.0°C","Status":"Normal"},
{"raspid":"1","DateTime":"08-15-01","Temperatur":"27.0°C","Status":"Normal"}]


Nun hänge ich bei folgendem Problem. Wie convertiere ich die .json Datei in SQL Code? oder Wie decodiere ich die .json Datei so, dass sie auf den SQL Server convertiert werden kann?

Installiert ist phpmyadmin, damit ich die Datenbank leichter bearbeiten kann, jedoch hänge ich bis jetzt bei dem Problem.

Ich hoffe, dass hier jemand ist, der mir helfen kann.

Mit freundlichen Grüßen
VarmintLP

Soll das ganze automatisiert über ein PHP Script oder ein Java-Programm geschehen?

Soweit ich das sehe, unterstützt phpMyAdmin die Formate XML und CSV, welche dafür geeignet wären.

[Link: Registrierung erforderlich]
Das wäre ein Konverter dafür, kannst du mal ausprobieren und die XML via Import-Funktion in PMA importieren
Hallo VarmintLP,

Genre kann ich dir ein PHP Script schreiben, dass dir den Code brauchbar für Phpmyadmin convertiert. Falls du Interesse hast, melde dich einfach Smile
Also das ganze soll automatisch ablaufen. Am besten mit einer bash oder Shell Skript die ich mit einem Crontab ausführe.

Es soll wie folgt ablaufen. Mein Prüfgerät schreibt eine .json Datei. Diese wird zu Uhrzeit X (in der config Datei festgelegt) in einen Ordner gesetzt der Send heißt, um ein versenden per sftp zu simulieren. Dann soll die .json Datei in die Datenbank hochgeladen werden. (andere Table oder die alten Werte wurden gelöscht.

Ich habe schon überlegt, mit einem line count die Linien zu zählen und mit einer schleife jede Zeile in einen SQL befehl zu convertieren. Nur weiß ich nicht genau, wie ich den Wert aus diesem Zeichenlabyrinth auslesen soll.
Hallo VarmintLP, hallo Dennis,

ein Umweg über XML finde ich nicht gut - und wäre ein unnötiger Mehraufwand.

Grundsätzlich ist JSON ein Array. Und deiner JSON-Datei fehlen für eine direkte konvertierung grundsätzliche Werte wie z.B. Tabellenname, INSERT oder UPDATE?

Um in PHP JSON umzuwandeln - mit einer Datei in deinem Format, kannst du "json_decode()" ([Link: Registrierung erforderlich]) verwenden.

Will heißen:

Code:
$JSON_STRING = '...';
$array = json_decode($JSON_STRING,true);

Nun kannst du einmal mit "print_r($array);" schauen wie das Array angelegt wird. Rein logisch müsste sowas dabei heraus kommen:

Code:
array(
0 => array (
raspid => 1,
DateTime => "08-14-01",
Temperatur => "27.0",
Status => "Normal"
),
...
)


Danach kannst du dir daraus eine Schleife mit "foreach" basteln und ein INSERT Statement erstellen:

Code:
$tmp = 'INSERT INTO mytable (raspdid, DateTime, Temperatur, Status) VALUES';
foreach($array as $entry) {
$tmp.= "('".$entry['raspid']."','".$entry['DateTime']."','".$entry['Temperatur']."','".$entry['Status']."'),";
}
echo $tmp;


Dabei sollte man beachten: Ich escape derzeit nicht den Inhalt. Defakto wäre SQL-Injection bei unsachgemäßen Eingaben möglich. Der Code ist nicht getestet und dient lediglich als Anhaltspunkt. Sollte aber so funktionieren.

Gruß

Ok Leute, Ich habe mir jetzt mal ein einfaches Skript erstellt, das Zeichen aus einem String nimmt. Jetzt wäre es hilfreich, wenn ich noch die einzelnen Wörter wie RaspId, DateTime, etc entfernen könnte und dann die 4 Letzten Werte in Variabeln setzen könnte.
Hey VarmintLP,

wäre vielleicht nett wenn du den Code dazu auch postest. Meine Glaskugel ist im Urlaub defakto kann ich da leider nicht sehen wie du bereits etwas umgesetzt hast. Ist es in PHP geschrieben? Batch? Shell?

Kalle schrieb:
Hey VarmintLP,

wäre vielleicht nett wenn du den Code dazu auch postest. Meine Glaskugel ist im Urlaub defakto kann ich da leider nicht sehen wie du bereits etwas umgesetzt hast. Ist es in PHP geschrieben? Batch? Shell?


Keine Sorge, ich lasse natürlich niemandem im dunkeln, wenn ich es schon schreibe, aber ich muss das Skript erst noch zu ende schreiben und das kann vlt noch etwas dauernd, da ich meine Tage habe, an denen ich an dem Projekt arbeite und somit auch sowas wie das Skript voranbringe.

Also bitte noch etwas Geduld

Moment,

das verstehe ich nicht.. du möchtest wissen wie man (ich zitiere wörtlich) "noch die einzelnen Wörter wie RaspId, DateTime, etc entfernen könnte und dann die 4 Letzten Werte in Variabeln setzen könnte" - aber willst jetzt erst "das Skript erst noch zu ende schreiben".

Ich habe KEIN Interesse an deinem fertigen Script, ich hatte aber Interesse dir dabei zu helfen. Aber anscheinend ist dies nicht mehr gewünscht. Also bis die Tage.
Naja ich arbeite in den Projektstunden die ich in der Schule habe an dem Projekt. Deswegen werde ich erst Morgen weiter dran arbeiten, aber ich habe schon eine Idee, wie ich das machen kann.

Edit:

Damit ich nun dieses Thema hier abschließen kann, werde ich mein Skript JSONToSQL.sh hier einmal veröffentlichen.

Es handelt sich lediglich um entfernte und ersetzte Zeichen, die das austeilen in einzelne Variabeln, die in einen Array eingefügt werden, um in eine SQL-Zeile hinzugefügt werden.

Code:
#!/bin/bash

source /home/pi/config.sh

while read line
do
    name=$line

    String=${name//\"}
    StringX=${String//\{}
    StringY=${StringX//\}}
    StringZ=${StringY//,/ }
    StringZX=${StringZ//:/ }
        StringZY=${StringZX//_/ }


    Wert=()
    IFS=' '

    for i in $StringZY
    do
        Wert+=($i)
    done
    unset IFS

    if [ $name != "[" ]; then
        mysql --user="$MYSQL_ROOT" --password="$MYSQL_PASS" -e "INSERT INTO RaspPiThermo.ThermoTest1 (raspid,DateTime,value,Status) VALUES ('${Wert[1]}','${Wert[3]}  ${Wert[4]}:${Wert[5]}:${Wert[6]}','${Wert[8]}','${Wert[10]}');"
    fi
done < $file

exit


Ich habe mir dioe Kommentierung noch gesparrt, da ich noch vereinzelte änderungen vornehmen werde, aber wer möchte, dem kann ich gerne noch ein paar Kommentare hinzuschreiben.

Seiten: 1 2
Referenz-URLs