path-binder
path-binder
フラットデータにパスを書くだけ。
あとは path-binder が構造化する。
フラットデータをネストされた JSON に変換する TypeScript ライブラリ
こんなデータが、こうなる
| user.name | user.age | user.role |
|---|---|---|
| Taro | 25 | admin |
| Jiro | 30 | editor |
{
"user": [
{ "name": "Taro", "age": 25, "role": "admin" },
{ "name": "Jiro", "age": 30, "role": "editor" }
]
}
各列に JSON パスを書き、データを入れる。generate() を呼ぶ。それだけです。
3ステップではじめる
1. インストール
npm install path-binder
2. データを用意する
スプレッドシートの各列を { path, value } ペアに変換します。
import { generate } from 'path-binder'
const input = {
Sheet1: [
[{ path: 'user.name', value: 'Taro' }, { path: 'user.age', value: 25 }],
[{ path: 'user.name', value: 'Jiro' }, { path: 'user.age', value: 30 }],
],
}
3. 変換する
const { result } = generate(input)
// → {
// user: [
// { name: 'Taro', age: 25 },
// { name: 'Jiro', age: 30 }
// ]
// }
なぜ path-binder?
toB SaaS 開発で、CSV やスプレッドシートなどのフラットデータを構造化 JSON に変換する必要に迫られたことはありませんか?
path-binder なら、各カラムに JSON パスのラベルを付けるだけ。 複雑な変換ロジックは不要です。一度パスを定義すれば、データのレイアウトがどう変わっても、マッピングは壊れません。
「Excel の関数で処理した方が楽では?」
一度きりの変換ならそうかもしれません。しかし、変化し続けるビジネス要件に合わせて複雑な数式チェーンをメンテナンスし続けるコストは膨大です。path-binder のアプローチ — データモデルに直接マッピングするシンプルなラベル付け — はそのコストを完全に排除します。サポートチームと一緒に導入すれば、運用コストの削減効果は明らかです。
特徴
ゼロ依存関係
外部依存なし。node_modules を汚さず、軽量で高速に動作します。
型安全
スキーマ定義に基づく厳密な型推論。TypeScript の恩恵を最大限に活かせます。
スキーマ対応
キャスト・フィルタを宣言的に定義。不要な列は自動除外されます。
マルチシート
複数シートのデータを参照キー($)で自動結合。リレーショナルな構造も1回の呼び出しで。
さらに高度な使い方
スキーマによる型変換と、$ 参照キーによるマルチシート結合を組み合わせた例です。
import { generate, defineSchema, asNumber, asString, arrayOf } from 'path-binder'
const input = {
sheetA: [
[{ path: 'user.id', value: 1 }, { path: 'user.name', value: 'Taro' }],
[{ path: 'user.id', value: 2 }, { path: 'user.name', value: 'Jiro' }],
],
sheetB: [
[{ path: 'user.$id', value: 1 }, { path: 'user.info[].type', value: 'google' }],
],
}
const schema = defineSchema({
user: {
id: asNumber(),
name: asString(),
info: arrayOf({ type: asString() }),
},
})
const { result } = generate(input, { schema })
// → {
// user: [
// { id: 1, name: 'Taro', info: [{ type: 'google' }] },
// { id: 2, name: 'Jiro' },
// ]
// }
次のステップ: パス構文でネストや配列の表現方法を学ぶ → スキーマで型キャストとフィルタリングを設定する → プレイグラウンドで試す