dexie/Dexie.js

Filtered Export produces invalid JSON file with an extra comma in data row array

Open

#1.070 aberto em 5 de jul. de 2020

Ver no GitHub
 (4 comments) (0 reactions) (0 assignees)JavaScript (10.304 stars) (625 forks)batch import
good first issue

Description

Hi,

Today I faced a problem with filtered export json file; Normally I do filtering for many tables without any problems, but this table strangely produces an extra comma in the exported data row array;

Here is the main export function I use for the table;

async function exportMember(memberNo, exportName) {
    if (db === null || memberNo === "") return false;

    memberNo = parseInt(memberNo);

    let rowCount = 0;
    let dbAsBlob = await db.export({
      prettyJson       : true,
      progressCallback : exportProgress,
      noTransaction    : true,
      filter           : (table, value) => {
        let returnValue = table === "member" && value.memberNo === memberNo;
        if (returnValue) rowCount++;
        return returnValue;
      }
    });
    //let jsonDB = JSON.parse(await dbAsBlob.text()); // It has a extra "," in the row list

    //jsonDB.data.tables.forEach(function (table) {
    //  table.rowCount = table.name === "member" ? rowCount : 0;
    //});
    //dbAsBlob = new Blob([JSON.stringify(jsonDB, undefined, 2)], { type : dbAsBlob.type });
    download(dbAsBlob, `${exportName || "ExportedMemberWithNo("}${memberNo}).json`, "application/json");

    return true;
  }

and this func generates a file like this

{
  "formatName": "dexie",
  "formatVersion": 1,
  "data": {
    "databaseName": "MemberDB",
    "databaseVersion": 1,
    "tables": [{ "name": "member", "schema": "++id,&memberNo", "rowCount": 1 }],
    "data": [
      {
        "tableName": "member",
        "inbound": true,
        "rows": [
          {
            "memberNo": 2592,
            "fullName": "Some Name",
            "photo": "data:image/jpeg;base64, very long jpeg data",
            "eMail": "mail@hotmail.com",
            "mobilePhoneNo": "5555555",
            "bloodType": "A Rh(+)",
            "id": 860,
            "birthday": "01.03.1978",
            "someFieldsAgain": "with some data",
            "workPhoneNo": null
          }
          ,
        ]
      }
    ]
  }
}

I use this approach for the other tables with no problem, only difference is the total row count which is 5500, the other tables have less than 100 rows.

Guia do colaborador