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 서브커맨드가 존재하지 않습니다. 모든 수정은 할당 표현식(assignment expressions)과 함께 --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)'
객체 연산
스프레드(spread)를 통한 병합
# 기존 객체에 새 키 추가
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" }'
변환 패턴
사용 사례별 상세 변환 패턴(설정 업데이트, 배치 처리, 형식 마이그레이션, 데이터 재구성, 오류 처리)은 변환 패턴을 참조하세요.
참고 자료
- Dasel v3 문서 (2026-02-19 가져옴)
- Dasel 스프레드 연산자 (2026-02-19 가져옴)
- Dasel each() 함수 (2026-02-19 가져옴)
- Dasel filter() 함수 (2026-02-19 가져옴)
- Dasel 변경 로그 (2026-02-19 가져옴)