Community寫作與編輯github.com

Jamie-BitFlight/data-transformation

用於修改、轉換或變換結構化資料,使用 dasel v3 — 支援原地變更、格式轉換、批次操作、陣列處理、物件建構以及 JSON、YAML、TOML、XML、CSV、HCL、INI 的合併模式

data-transformation 是什麼?

這項技能提供了使用 dasel v3 進行結構化資料轉換的完整指南。它涵蓋了原地修改、格式轉換、陣列操作、物件建構與合併,以及條件式轉換。技能強調整體的安全性:反覆強調永遠不要將輸出直接重導向到同一個輸入檔案,以避免資料遺失,並建議使用暫存檔案再重新命名的模式。它支援 JSON、YAML、TOML、XML、CSV、HCL 和 INI 等多種格式,適用於組態檔管理、批次處理和資料重塑等場景。適用於 Cursor、Claude Code、Codex 等平台。技能內容基於 dasel v3 的官方文件,並提供了多個使用範例和反模式警示。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jamie-BitFlight/claude_skills/tree/main/plugins/dasel/skills/data-transformation

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

使用 Dasel v3 進行資料轉換

<when_to_use>

在以下情況啟用此技能:

  • 修改組態檔中的值(YAML、TOML、JSON、XML、HCL、INI)
  • 在資料格式之間轉換(JSON 轉 YAML、TOML 轉 JSON 等)
  • 批次更新陣列元素(價格、版本、旗標)
  • 新增、移除或重塑資料結構
  • 合併物件或從現有資料建構新結構

</when_to_use>

安全規則

永遠不要將輸出直接重導向到同一個輸入檔案。 這會在 dasel 讀取檔案前將其截斷,導致資料遺失:

# 錯誤 — 會破壞輸入
cat config.yaml | dasel -i yaml --root 'port = 9090' > config.yaml

# 正確 — 先寫入暫存檔,再重新命名
cat config.yaml | dasel -i yaml --root 'port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml

永遠在覆寫前先驗證。 先預覽轉換結果,再進行重導向:

# 預覽
cat config.yaml | dasel -i yaml --root 'server.port = 9090'
# 套用
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml

核心修改語法

在 dasel v3 中,不存在 put 和 delete 子命令。所有修改都使用賦值表達式搭配 --root 來輸出完整文件。

設定值

# 輸出完整文件,僅變更一個欄位
cat config.yaml | dasel -i yaml --root 'server.port = 9090'

# 數值、布林值和字串賦值
echo '{"count": 1}' | dasel -i json --root 'count = 42'
echo '{"enabled": false}' | dasel -i json --root 'enabled = true'
echo '{"name": "old"}' | dasel -i json --root 'name = "new"'

設定巢狀值

cat config.yaml | dasel -i yaml --root 'database.connection.host = "db.example.com"'
cat config.yaml | dasel -i yaml --root 'database.connection.port = 5432'

原地修改(安全模式)

# 單一欄位更新
cat config.yaml | dasel -i yaml --root 'server.port = 9090' > config_tmp.yaml && mv config_tmp.yaml config.yaml

# 多個欄位 — 使用分號串聯
cat config.yaml | dasel -i yaml --root 'server.port = 9090; server.host = "0.0.0.0"' > config_tmp.yaml && mv config_tmp.yaml config.yaml

格式轉換

透過 dasel 使用不同的輸入/輸出格式旗標進行管線處理:

# JSON 轉 YAML
cat data.json | dasel -i json -o yaml > data.yaml

# YAML 轉 TOML
cat config.yaml | dasel -i yaml -o toml > config.toml

# JSON 轉 XML
cat data.json | dasel -i json -o xml > data.xml

# TOML 轉 JSON
cat config.toml | dasel -i toml -o json > config.json

# CSV 轉 JSON
cat data.csv | dasel -i csv -o json > data.json

陣列操作

附加到陣列

# 在陣列末尾新增元素
echo '[1,2,3]' | dasel -i json --root '[$this..., 4]'
# 輸出: [1, 2, 3, 4]

# 在陣列中附加物件
cat data.json | dasel -i json --root 'items = [$root.items..., {"name": "new", "value": 42}]'

使用 each 進行批次更新

# 將所有價格乘以 1.1(增加 10%)
cat data.json | dasel -i json --root 'items.each(price = price * 1.1)'

# 對所有元素設定旗標
cat data.json | dasel -i json --root 'users.each(active = true)'

# 遞增所有值
echo '[1,2,3]' | dasel -i json --root 'each($this = $this + 1)'

篩選後轉換

# 只取得活躍使用者,然後擷取名稱
cat data.json | dasel -i json 'users.filter(active == true).map(name)'

物件操作

透過展開合併

# 在現有物件中新增鍵
cat base.json | dasel -i json --root '{ $root..., "newKey": "value" }'

# 合併兩個物件
cat base.json | dasel -i json --root '{ $root..., "extra": true, "version": 2 }'

透過重建刪除欄位

由於 v3 沒有 delete 命令,請透過建構只包含所需鍵的新物件來移除欄位:

# 只保留 "name" 和 "email",其餘全部拋棄
echo '{"name":"a","email":"b","password":"c"}' | dasel -i json --root '{ name, email }'

透過重建重新命名欄位

echo '{"old_name": "value"}' | dasel -i json --root '{ "new_name": old_name }'

多步驟轉換

使用變數賦值和分號進行複雜操作:

# 將中間結果存入變數,再進行轉換
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'

# 多個變數
cat data.json | dasel -i json '$a = items.filter(price > 100); $b = $a.map(name); $b'

條件式轉換

# 根據條件設定值
cat data.json | dasel -i json --root 'if(count > 5) { status = "many" } else { status = "few" }'

轉換模式

如需針對特定使用情境的詳細轉換模式(組態更新、批次處理、格式遷移、資料重塑、錯誤處理),請參閱 轉換模式。

參考資料

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Jamie-BitFlight/agentskill-kaizen-meta-docs

Agentskill kaizen plugin documentation index. Load when needing to read about cross-platform notes, improvement plans, or DuckDB integration.

Jamie-BitFlight/bash-51-features

Bash 5.1 release features and improvements with practical examples. Use when working with Bash 5.1 features, epoch time variables, redirection enhancements, or when user asks about Bash 5.1 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-52-features

Bash 5.2 release features and improvements with practical examples. Use when working with Bash 5.2 features, variable handling enhancements, readline improvements, or when user asks about Bash 5.2 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-53-features

Bash 5.3 release features and improvements with practical examples. Use when working with Bash 5.3 features, new command substitution, GLOBSORT, loadable builtins, or when user asks about Bash 5.3 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-development

This skill should be used when the user asks to "write a bash script", "create a shell script", "implement bash function", "parse arguments in bash", "handle errors in bash", or mentions bash development, shell scripting, script templates, or modern bash patterns.

Jamie-BitFlight/bash-lint

This skill should be used when the user asks to "lint bash script", "run shellcheck", "format shell script", "use shfmt", "fix shellcheck errors", or mentions shell script linting, formatting, code quality, or pre-commit hooks for bash.

Jamie-BitFlight/bash-logging

This skill should be used when the user asks to "add logging to bash script", "colorize output", "implement log levels", "CI/CD sections", "terminal colors in bash", or mentions logging functions, emoji output, collapsible CI sections, or shlocksmith.

Jamie-BitFlight/bash-portability

This skill should be used when the user asks about "POSIX compatibility", "portable shell scripts", "cross-shell compatibility", "bashisms", "shebang selection", or mentions writing scripts that work on different shells (bash, sh, dash, zsh) or different systems.

Jamie-BitFlight/bash-testing

This skill should be used when the user asks to "test bash script", "write shell tests", "use shunit2", "use shellspec", "create test suite for bash", or mentions unit testing, test frameworks, mocking, or test-driven development for shell scripts.

Jamie-BitFlight/brainstorming-skill

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or when users request help with ideation, marketing, and strategic planning. Explores user intent, requirements, and design before implementation using research-validated prompt patterns.

Jamie-BitFlight/clang-format

Configure clang-format code formatting. Use when: user mentions clang-format or .clang-format, analyzing code style/patterns, creating/modifying formatting config, troubleshooting formatting, brace styles/indentation/spacing/alignment/pointer alignment, or codifying conventions.

Jamie-BitFlight/commitlint

When setting up commit message validation for a project. When project has commitlint.config.js or .commitlintrc files. When configuring CI/CD to enforce commit format. When extracting commit rules for LLM prompt generation. When debugging commit message rejection errors.

Jamie-BitFlight/conventional-commits

When writing a git commit message. When task completes and changes need committing. When project uses semantic-release, commitizen, git-cliff. When choosing between feat/fix/chore/docs types. When indicating breaking changes. When generating changelogs from commit history.

Jamie-BitFlight/dasel-reference

Use when querying, modifying, or converting JSON, YAML, TOML, XML, CSV, HCL, or INI with dasel v3. Complete reference for selectors, functions, conditionals, variables, spread operator, type casting, and format-specific patterns.

Jamie-BitFlight/data-exploration

Use when exploring unknown structured data files with dasel v3 — discover schema, list keys, find nested values, sample arrays, identify data types across JSON, YAML, TOML, XML, CSV, HCL, INI formats

Jamie-BitFlight/delegate

Decompose substantive work into phases, dispatch each phase to a sub-agent, and adjudicate what comes back. Use whenever a request asks for implementation, investigation, a fix, a review, or any change to files — including small ones — and whenever you are about to read source or run a diagnostic yourself instead of handing it off. Also use when a report from a sub-agent needs judging, when a phase needs re-dispatching, or when a user names one instance of a pattern. Does not apply when your own prompt begins "Your ROLE_TYPE is sub-agent." — then follow references/sub-agent-contract.md instead.

Jamie-BitFlight/enterprise-hibernate-hbm

Dasel v3 query patterns for Hibernate .hbm.xml mapping files — entity-table binding, Java property-to-column extraction, one-to-many set/list/bag relationship tracing, many-to-one foreign key discovery, batch scanning across 60+ HBM files. Use when querying Hibernate ORM class mappings, extracting schema metadata from Java persistence layer, or auditing entity-column relationships in enterprise legacy codebases.

Jamie-BitFlight/enterprise-installanywhere

Dasel v3 query patterns for InstallAnywhere .iap_xml installer definitions — use when querying action sequences, discovering variables, resolving platform conditions, navigating panels, or comparing installer variants. Files are 2.5+ MB, 65,000+ lines — too large for context reads, requires structural dasel queries.

Jamie-BitFlight/enterprise-maven-pom

Dasel v3 selector patterns for Maven POM XML files — use when querying dependency versions, filtering by groupId or scope, extracting module hierarchy from parent POMs, or detecting version conflicts across enterprise multi-module Java projects. Load this skill when working with pom.xml files using dasel.

Jamie-BitFlight/enterprise-spring-xml

Dasel v3 selectors for Spring bean factory XML — use when querying any Spring ApplicationContext XML for bean discovery, dependency wiring, JMS destination mapping, property injection extraction, or cross-bean reference tracing. Load this skill before writing dasel selectors against Spring bean XML files (applicationContext.xml, *_beans.xml, spring-*.xml).

相關技能