n8n에서 가장 헷갈려 한다는 node js에서의 전 노드 참조의 dot notation 구조 $input.first.json??

 

n8n이 골때리는게 있다. 자기만의 데이터 형식을 가지고 있다는 것이다. 

그냥 JS배열이나 객체가 아니다. 안에 내부 프라퍼티가 보이는 모양과 다르게 되어서

코드를 쓸때 "이걸" 명시해야 한다 




#"아이템": n8n 의 특이한 자료구조와 숨겨져서 찾기 어려운 혼동의 원인

위에 내가 "이걸" 명시해야 한다 라고 썼는데

"이것"은.. 

 json이라는 프라퍼티로서의 각 배열안 요소 즉 "아이템"이다!!!

 바로 최외곽 [] 배열 바로 아래의 아이템인 경우 .json을 꼭 붙여 지칭해서

접근한다는 것이 n8n이 특수하게 지네만이 개발한 자료구조의 특징이다.


모양을 표현하자면 [{json: {}}, ... ]

식이다. (이것을 일반 js 식으로 표현하자면 [ {}, ...] 임을 알자. 주의해서 차이를 보자

아래 이 차이를 설명하겠다)

근데 왜 이게 어렵냐고?


바로 혼동하기 쉬운 함정이 n8n에 있기 때문이다.

바로 우리가 노드를 돌리면 input이나 output란에 자료들 모습을 볼수 있다

(자료들 나오는 곳 보면 위에 Schema, Table, Json) 중에 json을 누르면 보인다

근데 거기서는 저 json: 식으로 안나오고 

우리가 아는 정상적인 [ {}, .. ] 식으로 json 이라는 키가 위에 말한 것처럼 

안 보이는, 지극히 우리가 아는 js 식의 평범한 모습으로 보이기 때문이다.







즉 n8n의 인풋이나 아웃풋을 보면 [ ] 즉 배열안에 있고, 

각 아이템이  {}인 경우 그걸 그냥 js문법으로 하면 안되고 

저렇게 지네만의 숨겨진 특이한 자료형으로 바꿔서 노드에서 돌아가기에

그 때문에 .json 같은 전혀 이상한 프라퍼티를 명시해냐 하는 거다.

(위에 두개 차이 예시를 보자. 원래 js 식의 구조와 n8n이 가진 배열의 모습 구조 차이를)

.json으로 그 한 아이템을 

명시해서 코드에 지칭해서 프라퍼티 처럼 써야 한다. 


아래를 보자. 


[ { json: {...}, binary: {...} }, 

{ json: {...} } ]


[] 안의 바로 밑 한개의 아이템이 {} 즉 js 객체 즉 오브젝트다. 


이를 그냥 js로 보면 저 배열이 x라면 x 후에 [0]을 하면 

접근이 가능할 거 같다. 


근데 이제 위에 배운 지식을 응용해 보면 code js 노드에서는 이러면 안된다. 

안에가 숨겨진 형태로 json: 하고 숨겨진 키가 있기 때문이다. 


x.json 이렇게 해줘야 한다. 



그러면 이런 의문도 가능하다.

하위 구조에 다시 js object 즉 {} 구조가 또 있다면

계속 저런 식으로 연속해서 해야 하나?

아니다. 저  최상단 위계 [ ] 의 바로 밑의 객체만 그렇게 지칭하고 그 하위부터는 .json을 안 붙여도 된다. 


Previous Post Next Post