Python Flask und aus JSON Datenauslesen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    Ich habe keine Lösung finden können. Ich arbeite mich gerade in Flask ein. Ich habe Daten aus einer SQLite Datenbank ausgelesen mit JSON Dump. Und erhalte auch ein Jason Array. Dort sind z.B. Werte wie folgt angegeben:

    [[1,23,45,34],[2,36,47,36],[3,28,52,35]]

    Die erste Position ist die ID, eine Fortlaufende Nummer, die anderen sind Messwerte oder Berechnete Werte.

    Nun möchte ich daraus wieder Daten Sammeln, um sie mit Highcharts zu visualisieren. Dazu brauche ich aus allen Eckigen Klammern ein Array mit jeweils der Position 2 und dann ein Array jeweils mit der Poition 3 usw.

    Nun stehe ich auf dem Schlauch wie ich das Auslese und die Arrays dazu erstelle um sie als y oder x Wert zu zuordnen.

    Kann mir da eventuell jemand helfen?

    Danke schnon mal

  • Ich habe Daten aus einer SQLite Datenbank ausgelesen mit JSON Dump.

    :conf:

    Dazu brauche ich aus allen Eckigen Klammern ein Array mit jeweils der Position 2 und dann ein Array jeweils mit der Poition 3 usw.

    Anstatt von "Eckigen Klammern" redest du bitte von Listen, das ist es nämlich in Python. Mache mal ein Beispiel, wie das Ergebnis aussehen soll.

  • Sorry für die schlechte Beschreibung, ich versuche es jetzt etwas besser:

    Das funktioniert:

    Da bekomme ich dann die Liste.

    Dies ist der Code, wie ich die data.json wieder auslesen möchte:

    $(function () {

    $.getJSON('http://127.0.0.1:5000/data.json', function (data)

    Aus der Liste [[1,23,45,34],[2,36,47,36],[3,28,52,35]], soll er folgendes machen

    Array 1 wäre [23,36,28] Also alles was an zweiter Position ist in ein Array.

    Array 2 wäre [45,47,52] alles was an dritter Position ist in ein Array

    Array 3 wäre [34,36,35] alles was an vierter Position ist in ein Array

    Aus Array 1 und 2 hätte ich dann die Werte für y und Array 3 würde ich für die X-Achse benutzen.

    Wie erstelle ich die Arrays aus den Daten der data.json?

  • Hier mal eine aussagekräftigere Antwort, dein erster Beitrag war für mich verständlich genug:

    Output:

    Python
    [23, 36, 28]
    [45, 47, 52]

    Beachte, dass man in den meisten Sprachen mit dem Index 0 anfängt. Deshalb hat deine "Position 2" den Index 1.

    Kelvin

  • Hallo,

    Zitat

    Ich habe Daten aus einer SQLite Datenbank ausgelesen mit JSON Dump.

    Nee. Du nutzt die Python DB 2.0 API (was richtig ist) und rufst dann noch völlig überflüssiger Weise `json.dumps` auf. Du bekommst als Ergebnis der DB-Abfrage eine Liste von Listen (was richtig ist) und genau damit möchtest du weiter arbeiten.

    Zitat

    Dazu brauche ich aus allen Eckigen Klammern ein Array mit jeweils der Position 2 und dann ein Array jeweils mit der Poition 3 usw.

    Was du suchtst ist der Indexzugriff auf Listen. Das gehört zu den Grundlagen von Python... Vielleicht solltest du nochmal die entsprechenden Abschnitte im Python-Tutorial lesen.

    Kelvin: Variablennamen schreibt man in Python klein_mit_unterstrich, nicht CamelCase oder PascalCase. Und ein Variablenamen sollte beschreiben, welche Daten enthalten sind und nicht, welchen Datentyp die Variable hält (`innerList`). Und wenn man anfängt, Variablen durchzunummerieren, dann kannst du sehr sicher sein, dass du den falschen Datentyp gewählt hast oder einfach schlechte Variablennamen.

    Wenn man nur den 2. und 3. Eintrag einer beliebig langen Liste braucht, geht das so einfacher:

    Python
    >>> data = [[1,23,45,34],[2,36,47,36],[3,28,52,35]]
    >>> _, x, y, *_ = zip(*data)
    >>> x
    (23, 36, 28)
    >>> y
    (45, 47, 52)
    >>>

    Gruß, noisefloor

  • Kelvin: Danke für die schnelle Antwort. Ich habe es auch gleich erst mal ausprobiert und es funktioniert so wie ich es meinte :)

    ich bekomme dann die sortierten Listen und füge sie wieder zusammen:

    data = pos1, pos2, pos3

    return json.dumps(data)

    Die Daten möchte ich dann in einer HTML verarbeiten um sie mit Highcharts zu visualisieren. Dazu benutze ich ja Python Flask.

    Nur im HTML brauche ich dann wieder die einzelnen Listen um sie den Achsen zu zuordnen.

    Nur da benutzt man JavaScript oder JQuery? Da bin ich noch nicht schlau draus geworden. Python kann man da nicht benutzen.

    Oder kann ich auch die einzelnen Listen speichern und übergeben und im HTML einzeln abrufen?

    Mein Anfang ist bis jetzt in der HTML:

    $(function () {

    $.getJSON('http://127.0.0.1:5000/data.json', function (data)


    Aller Anfang ist schwer.

  • jQuery IST eine JavaScript Bibliothek, du vergleichst also Äpfel mit Birnen.

    Ja, aller Anfang mag schwer sein, aber vielleicht lernst du erstmal ein paar Grundlagen, etwa Begrifflichkeiten.

    HTML = Hypertext Markup Language, eine Beschreibungssprache: im HTML kannst du nichts berechnen, abrufen oder ausführen. Das geschieht mit JavaScript.

    • Überlege dir eine Sinnvolle Datenstruktur, die du ohne große Änderungen an den Highcharts-Konstruktor übergeben kannst.
    • Implementiere, dass diese serverseitig zurückgegeben wird.
    • Auf der Clientseite rufst du im JavaScript die Daten ab und erstellst deinen Chart.
    • jQuery kannst du getrost über Board werfen, das braucht man schon seit einigen Jahren nicht mehr - alle aktuellen Browser halten sich an die Standards und unterstützen die modernen APIs.
    • Orientiere dich an der Doku von Highcharts, wenn du Hilfe brauchst, poste dein HTML und JS.
  • Variablennamen schreibt man in Python klein_mit_unterstrich, nicht CamelCase oder PascalCase. Und ein Variablenamen sollte beschreiben, welche Daten enthalten sind und nicht, welchen Datentyp die Variable hält (`innerList`).

    Danke, ich habe mich erst kürzlich mit Autopep8 auseinandergesetzt und für mich stand hier noch in erster Linie, dass es funktioniert. Kosmetische Dinge kann man immer noch später ändern und beeinflussen auch nicht die Arbeitsweise des Codes. (Weil hier viele penibel sind, sage ich an dieser gleich, dass eine konforme Formatierung natürlich nicht unnötig/schädlich/whatever ist ;) )


    Wie oft ändern sich deine Daten und wie wichtig ist Benutzer-Interaktion? Ein etwas anderer, unkonventioneller, Weg wäre ein Python Script, das alle x Minuten deine data.json Datei anlegt und eine Website, die lediglich diese JSON-Datei abruft* und dann darstellt.

    Wenn du Apfelsaft trinken möchtest, dann kannst du mühselig Äpfel pressen (JavaScript) oder du nimmst fertigen Apfelsaft (jQuery). jQuery erleichtert vieles und wird auch auf einigen Seiten benutzt (wie z.B. dieses Forum hier), doch für simple Aufgaben sollte man auf pures JavaScript setzen. Es wäre unnötig jQuery nur dafür zu benutzen, um die .json-Datei zu laden, denn wie Linus schon sagte, gibt es immer mehr Browser, die APIs unterstützen, die diese Jobs erledigen: die Fetch API wäre was für deinen Fall.


    *Platzhalter, falls du diesen Weg einschlagen solltest. Ich schreibe dann genaueres dazu, würde hier jetzt nämlich das Thema verfehlen

    Kelvin

  • Hallo,

    Tschili: um die Daten in den Browser zu bekommen baust du sie entweder hard-coded ins Template ein, was du via Flask bauen lässt. Hätte den Nachteil, dass du die Seite jedesmal komplett neu laden musst, um den Graphen zu aktualisieren.

    Oder du baust dir ein Flask eine Route, welche nur die aktuellen Daten als JSON abruft. Clientseitig nutzt du dazu die genannte fetch-API, serverseitig nutzt du `jsonify` Methode von Flask, welche deine Liste von Liste aus der DB-Abfrage in JSON und einen korrekten JSON-Response umwandelt.

    Gruß, noisefloor

  • Hier mal mein Python Skript mit FLASK, das Beispiel hatte ich eingebaut, ich habe ein Ultraschallsensor Skript womit ich den Füllstand meiner Zisterne auslesen möchte und die SQLite Datenbank befüllt. Die Daten möchte ich dann visuell mit Highcharts darstellen.

    Python Skript:

    und das die HTML wo ich den Chart erzeugen möchte und wo die Daten verwendet werden sollen, vielleicht geht es auch einfacher:

    Vielleicht ist es jetzt verständlicher was ich bis jetzt gemacht habe

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!