Announcement

Collapse
No announcement yet.

JSON erstellen/ausgeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JSON erstellen/ausgeben

    Hallo,

    ich will in JS ein JSON erstellen/ausgeben und komme nicht weiter.
    In einem Array habe ich eine SQL Abfrage, den Tabellennamen und dann immer die Spalten der Tabelle. Dies wiederholt sich dann je nach dem wie viele Tabellen ich habe.
    Dann wollte ich eine function haben, damit ich nicht immer alles wiederholt hinschreiben muss.
    Ich splitte die SQL Abfrage, den Tabellennamen und die Spalten und schreibe sie in eine Variable.
    Danach frage ich die Einträge von der jeweiligen Tabelle mit dem SQL Befehl ab. Da die Anzahl der Spalten unterschiedlich ist, muss ich es so hinbekommen, das er auch immer alle Spalten schreibt.
    Am Ende will ich die JSON Struktur haben damit ich die in eine Datei weg schreiben kann.

    So hatte ich es mir gedacht wie es gehen sollte.
    Code:
    var array = ["SELECT carrier_id, carrier_name FROM carriers;|carriers|carrier_id|carrier_name", "SELECT client_id, company_name, company_code, storage_days FROM clients;|clients|client_id|company_name|company_code|storage_days"];
    readDB.apply(this, array);
    
    function readDB() {
        for (i = 0; i < array.length; i++) {
            var array_plus = [];
            var vara = array[i].split("|");
            var cmd = vara[0];
            var table = vara[1];
            console.info("Table: " + table);
            plus1 = {};
            plus2 = {};
            plus1.tables = [];
            sql.eachRowNative("OMSDB", cmd, function(row) {
                var k = 0;
                plus1.tables['command'] = cmd;
                plus1.tables['table'] = table;
                plus2.tables[i] = {};
                plus2.tables[i].columns = [];
                for (j = 2; j < vara.length; j++) {
                    if (row[k] == null) {
                        var value = JSON.parse('""');
                    } else {
                        var value = row[k];
                    }
                    plus2.tables[i].columns[k][vara[j]] = value;
                    k++;
                }
                plus1.tables.push(plus2.tables[i]);
                array_plus.push(plus1.tables);
                console.info(plus1.tables);
            })
        }
    }
    Wie das Ergebnis sein sollte.
    Code:
    {
        "tables": [
            {
                "command": "SELECT carrier_id, carrier_name FROM carriers",
                "table": "carriers",
                "entries": [
                    {
                        "carrier_id": "DP",
                        "carrier_name": "DPAG"
                    },
                    {
                        "carrier_id": "BP",
                        "carrier_name": "Briefpost"
                    }
                ]
            },
                "command": "SELECT client_id, company_name, company_code, storage_days FROM clients;",
                "table": "clients",
                "entries": [
                    {
                        "client_id": "123456",
                        "company_name": "DP",
                        "company_code": "ABC",
                        "storage_days": "7"
                    },
                    {
                        "client_id": "654321",
                        "company_name": "Amazon",
                        "company_code": "AZN",
                        "storage_days": "7"
                    }
                ]
            }
        ]
    }
    ich hoffe ich habe es etwas verständlich rüber gebracht.

    Danke und VG
    Mario
    Zuletzt editiert von Barchie; 31.08.2022, 10:53.

  • #2
    Da du offenbar irgendein serverseitiges Javascript benutzt, kann man das nicht nachvollziehen.
    Also solltest du doch nachvollziehen was nciht so geschrieben wird
    Christian

    Comment


    • #3
      Ich habe gezeigt wie das Ergebnis sein soll. Kann dann keiner sagen wie der JS-Code dann sein müsste um sie zu bauen? Ich will wissen wie man ein Array im Array schreibt.
      Zuletzt editiert von Barchie; 31.08.2022, 08:44.

      Comment


      • #4

        Prüfe mal mit
        JSON.stringify(yourArray);
        Christian

        Comment


        • #5
          ich habe es jetzt anders gelöst.

          Code:
           var daten = readDB.apply(this, array);
           
          function readDB() {
            var daten = '{"tables": [';
            for (i = 0; i < array.length; i++) {
            var vara = array[i].split("|");
            var cmd = vara[0];
            var table = vara[1];
                    daten = daten + '{"command": "' + cmd + '","table": "' + table + '","entries": [';
            sql.eachRowNative("OMSDB", cmd, function(row) {
                        daten = daten + '{';
            var k = 0;
            var l = vara.length;
            var minus1 = l - 1;
            for (j = 2; j < l; j++) {
            if (row[k] == null) {
            var key = vara[j];
            var value = JSON.parse('""');
                            } else {
            var key = vara[j];
            var value = row[k];
                            }
            if (j < minus1) {
                                daten = daten + '"' + key + '": "' + value + '",';
                            } else {
                                daten = daten + '"' + key + '": "' + value + '"},';
                            }
                            k++;
                        }
                    })
                    daten = daten.slice(0, -1);
                    daten = daten + ']},'
                }
            return daten;
            }
            daten = daten.slice(0, -1);
            daten = daten + ']}';
            console.info(daten);

          Comment

          Working...
          X