필드 변환 7종
toNumber·toString·toBoolean·dateFormat·valueMap·defaultValue·template의 실제 동작과 주의점.
매핑한 값을 그대로 쓰지 않고 형태를 바꿔야 할 때가 있습니다. 공공 API는 숫자를 문자열로 주는 경우가 흔하고, 코드값을 사람이 읽을 말로 바꿔야 하는 일도 많습니다.
{
"source": "pm10Value",
"output": "pm10",
"transforms": [{ "type": "toNumber" }]
}
transforms는 배열이라 여러 개를 순서대로 적용할 수 있습니다. 앞 변환의 출력이 뒤 변환의 입력이 됩니다.
일곱 가지
toNumber
숫자로 바꿉니다. 바꿀 수 없으면 원본 값을 그대로 둡니다.
| 입력 | 출력 |
|---|---|
"25" |
25 |
"abc" |
"abc" (변환 실패 → 원본 유지) |
"" |
0 |
null |
0 |
true |
1 |
NaN이 결과로 나가는 일은 없습니다. 대신 숫자가 될 거라 기대한 자리에 문자열이 남을 수 있으므로, 계산에 쓰기 전에 값을 확인하는 편이 안전합니다. 공공 API가 결측치를 "-"나 "통신장애"로 표기하는 경우가 실제로 흔합니다.
toString
문자열로 바꿉니다. null과 undefined는 빈 문자열이 됩니다 — "null"이 아닙니다.
| 입력 | 출력 |
|---|---|
0 |
"0" |
false |
"false" |
null |
"" |
[1, 2] |
"1,2" |
{ a: 1 } |
"[object Object]" |
객체에 쓰면 쓸모없는 문자열이 나오므로, 중첩 값은 매핑 경로로 먼저 꺼내세요.
toBoolean
참·거짓으로 바꿉니다. 자바스크립트의 truthy 규칙을 그대로 따르므로 직관과 어긋나는 경우가 있습니다.
| 입력 | 출력 |
|---|---|
"true" |
true |
"false" |
true |
"0" |
true |
"" |
false |
0 |
false |
null |
false |
문자열 "false"와 "0"이 모두 true가 됩니다. 비어 있지 않은 문자열은 전부 참이기 때문입니다. "Y"/"N"이나 "1"/"0"으로 오는 값을 다룰 때는 toBoolean 대신 valueMap을 쓰세요.
valueMap
값을 표로 치환합니다. 표에 없는 값은 그대로 통과합니다.
{
"type": "valueMap",
"map": { "1": "좋음", "2": "보통", "3": "나쁨", "4": "매우나쁨" }
}
키는 문자열로 맞춰 찾으므로 원본이 숫자 1이든 문자열 "1"이든 "좋음"이 됩니다.
"Y"/"N" 같은 값을 다룰 때 유용합니다.
{ "type": "valueMap", "map": { "Y": "사용", "N": "미사용" } }
defaultValue
값이 비었을 때 대신 넣습니다.
{ "type": "defaultValue", "value": 0 }
null과 undefined만 치환합니다. "", 0, false는 값이 있는 것으로 보고 그대로 둡니다. 빈 문자열을 기본값으로 바꾸고 싶다면 이 변환으로는 되지 않습니다.
원본에 없는 필드를 매핑했을 때 키가 사라지는 것을 막는 용도로 자주 씁니다.
{
"source": "optionalField",
"output": "value",
"transforms": [{ "type": "defaultValue", "value": null }]
}
template
값을 문자열 안에 끼워 넣습니다.
{ "type": "template", "template": "${value}㎍/㎥" }
45 → "45㎍/㎥"
치환되는 것은 ${value} 하나뿐입니다. 다른 필드를 참조할 수 없고, ${other}라고 써도 그대로 남습니다. 여러 번 쓰면 모두 치환됩니다.
{ "type": "template", "template": "${value}년 ${value}월" }
결과는 항상 문자열이므로 이후에 toNumber를 붙이면 대개 원래 값으로 돌아오지 못합니다. 순서에 주의하세요.
dateFormat
현재 이 변환은
format을 적용하지 않습니다. 값을 문자열로 바꾸기만 하며,YYYY-MM-DD같은 패턴을 넣어도 무시됩니다. 동작은toString과 같습니다.
날짜 형식을 바꿔야 한다면 지금은 애플리케이션 쪽에서 처리하세요.
const date = new Date(item.measuredAt);
const label = date.toLocaleDateString('ko-KR');
여러 변환 이어 붙이기
배열 순서대로 적용됩니다.
{
"source": "pm10Value",
"output": "pm10",
"transforms": [
{ "type": "defaultValue", "value": "0" },
{ "type": "toNumber" }
]
}
값이 없으면 "0"으로 채운 뒤 숫자 0으로 바꿉니다. 순서를 뒤집으면 toNumber가 먼저 undefined를 만나 그대로 두므로 기본값이 적용되지 않습니다.
읽기 좋은 표시용 문자열을 만들 때도 순서가 중요합니다.
{
"transforms": [
{ "type": "toNumber" },
{ "type": "template", "template": "${value}㎍/㎥" }
]
}
"045" → 45 → "45㎍/㎥". toNumber를 먼저 두어 앞의 0을 떨어뜨렸습니다.
콘솔에서 고를 수 있는 것
에디터의 드롭다운에는 toNumber·toString·toBoolean 세 가지만 나옵니다. 나머지 네 가지는 규칙 JSON을 직접 편집해야 설정할 수 있습니다.
규칙 전체 구조는 가공 규칙 이해하기에 있습니다.