@dpkit/table
Version:
Data Package implementation in TypeScript.
34 lines • 4.95 kB
JavaScript
import { DataFrame } from "nodejs-polars";
import { describe, expect, it } from "vitest";
import { processTable } from "../../table/index.js";
describe("parseObjectField", () => {
it.each([
// Valid JSON objects
['{"name":"John","age":30}', { name: "John", age: 30 }],
['{"numbers":[1,2,3]}', { numbers: [1, 2, 3] }],
['{"nested":{"prop":"value"}}', { nested: { prop: "value" } }],
["{}", {}],
// JSON but not an object
["[1,2,3]", null],
['["a","b","c"]', null],
// Trimming whitespace
//[' {"name":"John"} ', { name: "John" }],
//['\t{"name":"John"}\n', { name: "John" }],
// Invalid JSON
//["{invalid}", null],
["not json", null],
["", null],
["null", null],
["undefined", null],
])("%s -> %s", async (cell, value) => {
const table = DataFrame({ name: [cell] }).lazy();
const schema = {
fields: [{ name: "name", type: "object" }],
};
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
const res = df.getColumn("name").get(0);
expect(res ? JSON.parse(res) : res).toEqual(value);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9maWVsZC90eXBlcy9vYmplY3Quc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ04scUJBQXFCO1FBQ3JCLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN2RCxDQUFDLHFCQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUM5RCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFFVix5QkFBeUI7UUFDekIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQ2pCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQztRQUV2QixzQkFBc0I7UUFDdEIsMENBQTBDO1FBQzFDLDRDQUE0QztRQUU1QyxlQUFlO1FBQ2Ysc0JBQXNCO1FBQ3RCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztRQUNsQixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDVixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDZCxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7S0FDcEIsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNoRCxNQUFNLE1BQU0sR0FBRztZQUNiLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBaUIsRUFBRSxDQUFDO1NBQ3BELENBQUE7UUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRTlCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YUZyYW1lIH0gZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IHByb2Nlc3NUYWJsZSB9IGZyb20gXCIuLi8uLi90YWJsZS9pbmRleC50c1wiXG5cbmRlc2NyaWJlKFwicGFyc2VPYmplY3RGaWVsZFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIC8vIFZhbGlkIEpTT04gb2JqZWN0c1xuICAgIFsne1wibmFtZVwiOlwiSm9oblwiLFwiYWdlXCI6MzB9JywgeyBuYW1lOiBcIkpvaG5cIiwgYWdlOiAzMCB9XSxcbiAgICBbJ3tcIm51bWJlcnNcIjpbMSwyLDNdfScsIHsgbnVtYmVyczogWzEsIDIsIDNdIH1dLFxuICAgIFsne1wibmVzdGVkXCI6e1wicHJvcFwiOlwidmFsdWVcIn19JywgeyBuZXN0ZWQ6IHsgcHJvcDogXCJ2YWx1ZVwiIH0gfV0sXG4gICAgW1wie31cIiwge31dLFxuXG4gICAgLy8gSlNPTiBidXQgbm90IGFuIG9iamVjdFxuICAgIFtcIlsxLDIsM11cIiwgbnVsbF0sXG4gICAgWydbXCJhXCIsXCJiXCIsXCJjXCJdJywgbnVsbF0sXG5cbiAgICAvLyBUcmltbWluZyB3aGl0ZXNwYWNlXG4gICAgLy9bJyB7XCJuYW1lXCI6XCJKb2huXCJ9ICcsIHsgbmFtZTogXCJKb2huXCIgfV0sXG4gICAgLy9bJ1xcdHtcIm5hbWVcIjpcIkpvaG5cIn1cXG4nLCB7IG5hbWU6IFwiSm9oblwiIH1dLFxuXG4gICAgLy8gSW52YWxpZCBKU09OXG4gICAgLy9bXCJ7aW52YWxpZH1cIiwgbnVsbF0sXG4gICAgW1wibm90IGpzb25cIiwgbnVsbF0sXG4gICAgW1wiXCIsIG51bGxdLFxuICAgIFtcIm51bGxcIiwgbnVsbF0sXG4gICAgW1widW5kZWZpbmVkXCIsIG51bGxdLFxuICBdKShcIiVzIC0+ICVzXCIsIGFzeW5jIChjZWxsLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHsgbmFtZTogW2NlbGxdIH0pLmxhenkoKVxuICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW3sgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwib2JqZWN0XCIgYXMgY29uc3QgfV0sXG4gICAgfVxuXG4gICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgIGNvbnN0IGRmID0gYXdhaXQgbGRmLmNvbGxlY3QoKVxuXG4gICAgY29uc3QgcmVzID0gZGYuZ2V0Q29sdW1uKFwibmFtZVwiKS5nZXQoMClcbiAgICBleHBlY3QocmVzID8gSlNPTi5wYXJzZShyZXMpIDogcmVzKS50b0VxdWFsKHZhbHVlKVxuICB9KVxufSlcbiJdfQ==