프롬프트
file: 활용-11-2-Node-RED에 내장된 JSONata의 연산자.md
프롬프트 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 프롬프트의 내용이 복사됩니다.Node-RED에 내장된 JSONata의 연산자에 대해 설명해 줘.
AI가 만든 결과
Node-RED에 내장된 JSONata는 JSON 데이터를 간결하게 탐색·변환하기 위해 설계된 표현 언어(Expression Language)입니다. 여러 가지 연산자를 제공하여, 숫자·문자열·논리 연산부터 조건 처리까지 직관적으로 작성할 수 있습니다. 아래는 JSONata에서 자주 사용하는 주요 연산자와 그 특징을 정리한 내용입니다.
1. 산술 연산자 (Arithmetic Operators)
연산자 | 설명 | 예시 | 결과 |
---|---|---|---|
+ | 두 피연산자를 더함 | 3 + 4 | 7 |
- | 두 피연산자를 뺌 (또는 단항 음수 표시) | 10 - 3 | 7 |
* | 두 피연산자를 곱함 | 2 * 3 | 6 |
/ | 앞 피연산자를 뒤 피연산자로 나눔 | 10 / 5 | 2 |
% | 나머지(Modulus) 연산 | 10 % 3 | 1 |
- JSONata 표현식에서 숫자 타입끼리 연산할 수 있으며, 어떤 경우에는 오류 혹은
null
이 반환될 수 있으므로 주의합니다. -
연산자는 단항 음수를 표시할 때도 사용합니다.
예:-5
(음수 5)
2. 비교 연산자 (Comparison Operators)
연산자 | 설명 | 예시 | 결과 |
---|---|---|---|
= | 두 값이 같은지 비교 (동등성) | "Alice" = "Alice" | true |
!= | 두 값이 다른지 비교 | "Alice" != "Bob" | true |
< , > | 두 값(숫자, 문자열 등)을 비교 | 5 < 10 | true |
<= , >= | 작거나 같다, 크거나 같다 비교 | 5 <= 5 | true |
- 문자열 비교 시 사전순으로 비교되며, 숫자 비교 시 일반적인 수치 비교가 이루어집니다.
- JSONata에서는
==
,===
같은 구분은 없고,=
하나만으로 동등성을 표현합니다.
3. 논리 연산자 (Logical Operators)
연산자 | 설명 | 예시 | 결과 |
---|---|---|---|
and | 두 조건이 모두 참(true )인지 | (5 < 10) and true | true |
or | 두 조건 중 하나라도 참(true )인지 | (5 < 10) or false | true |
not | 조건이 거짓(false )인지 | not false | true |
and
와or
는 단락 평가(short-circuit evaluation)를 합니다.
예:(false and (1/0))
→ 첫 항이false
이면 전체가false
로 확정되므로 뒤 연산은 실행되지 않을 수 있음.
4. 조건(삼항) 연산자 (Conditional / Ternary Operator)
JSONata는 if ... then ... else
구문을 지원하며, 그와 유사하게 삼항(ternary) 형태의 조건 표현도 가능합니다.
- if-then-else 구문:
if (age >= 30) then "장년" else "청년"
- 삼항 연산자:
age >= 30 ? "장년" : "청년"
두 가지 방식 모두 동일한 결과를 도출하며, 취향 및 상황에 맞게 선택해서 사용합니다.
5. 문자열 결합 연산자 (&)
JSONata에서는 &
기호를 사용해 문자열을 이어 붙일(concatenate) 수 있습니다.
"Hello " & "World" // 결과: "Hello World"
- 숫자를 문자열과 결합해야 할 경우, 자동으로 문자열로 변환됩니다.
- 예)
name & "의 나이는 " & age & "살 입니다."
6. 범위·필터 표현 (경로 연산과 혼합)
JSONata의 핵심인 경로(Path) 표현에 포함되는 연산도 있습니다.
- 배열 슬라이싱 / 범위:
[start..end]
- 예)
numbers[1..3]
→ 인덱스 1부터 3까지 추출
- 예)
- 조건 필터:
[ ... ]
내부에 조건식을 넣어, 해당 배열의 요소를 필터링- 예)
users[age >= 30]
→age
필드가 30 이상인 요소만 골라내기
- 예)
엄밀히 말하면 전형적인 “연산자”는 아니지만, JSONata의 문법에서 대괄호([]
) 안에 조건을 작성하는 방식을 자주 쓰므로, 연산자와 결합하여 필터링 로직을 작성하게 됩니다.
7. 그 밖의 주의사항
in
연산자- JSONata 공식 문서에는
in
연산자가 있어, 어떤 값이 배열(또는 객체의 키 등)에 포함되어 있는지 확인하는 기능을 합니다. - 예)
"Alice" in ["Alice", "Bob"]
→true
- Node-RED 내장 JSONata 버전에 따라 사용 여부가 다를 수 있으니 주의합니다.
- JSONata 공식 문서에는
연산자 우선순위
- 일반적인 수학 규칙과 비슷하게
*
,/
,%
가+
,-
보다 우선 실행됩니다. and
,or
는 비교 연산보다 뒤에 평가됩니다.- 복잡할 경우 괄호를 사용해 명시적인 우선순위를 지정하는 것이 좋습니다.
- 일반적인 수학 규칙과 비슷하게
에러 처리
- 잘못된 타입끼리 연산하거나, 배열 인덱스 범위를 벗어나는 경우
null
또는 오류가 반환될 수 있습니다. - Node-RED의 디버그 노드 등을 통해 결과를 확인하며 식을 작성하는 것이 좋습니다.
- 잘못된 타입끼리 연산하거나, 배열 인덱스 범위를 벗어나는 경우
정리
- 산술 연산자(+, -, *, /, %)로 숫자 계산 가능
- 비교 연산자(=, !=, <, <=, >, >=)로 동등성·크기 비교 가능
- 논리 연산자(and, or, not)로 복합 조건 처리
- 조건(삼항) 연산자(if-then-else 또는
? :
)로 분기 로직 작성 - 문자열 결합(
&
)으로 간단히 문자열 이어 붙이기 - 필터(
[...]
), 범위(start..end
) 등의 문법과 조합해 JSON 데이터를 효율적으로 탐색 및 변환
이와 같은 연산자를 이해하면, Node-RED에서 JSONata를 활용해 메시지(payload) 처리를 훨씬 유연하고 강력하게 할 수 있습니다. 자주 쓰이는 연산자들을 익혀 두면, 복잡한 데이터도 간단히 가공·필터링하는 로직을 작성할 수 있습니다.