JMESPath로 JSON 쿼리하기
JMESPath는 JSON 문서에서 요소를 추출하고 변환하는 데 사용할 수 있는 JSON용 쿼리 언어입니다. n8n은 사용자 정의 메서드인 jmespath()를 제공합니다. 더 긴 코드 예시는 표현식에서 작동하지 않습니다.
JMESPath는 JSON 문서에서 요소를 추출하고 변환하는 데 사용할 수 있는 JSON용 쿼리 언어입니다. JMESPath 사용에 대한 자세한 내용은 JMESPath 문서를 참조하세요.
jmespath() 메서드#
n8n은 사용자 정의 메서드인 jmespath()를 제공합니다. 이 메서드를 사용하여 JMESPath 쿼리 언어를 사용하여 JSON 객체를 검색합니다.
기본 구문은 다음과 같습니다:
$jmespath(object, searchString)
_jmespath(object, searchString)
var jmespath = require('jmespath');
jmespath.search(object, searchString);
더 긴 코드 예시는 표현식에서 작동하지 않습니다. 표현식은 단일 행이어야 합니다.
object는 이전 노드의 출력과 같은 JSON 객체입니다. searchString은 JMESPath 쿼리 언어로 작성된 표현식입니다. JMESPath 사양은 지원되는 표현식 목록을 제공하며, 튜토리얼과 예시는 인터랙티브 예제를 제공합니다.
JMESPath 사양의 예시는 search(searchString, object) 패턴을 따릅니다. n8n이 사용하는 JMESPath JavaScript 라이브러리는 대신 search(object, searchString)을 지원합니다. 따라서 JMESPath 문서의 예시를 사용할 때 검색 함수 파라미터의 순서를 변경해야 할 수 있습니다.
일반적인 작업#
이 섹션은 일반적인 작업에 대한 예시를 제공합니다. 더 많은 예시와 자세한 지침은 JMESPath 자체 문서에서 확인할 수 있습니다.
이 예시를 시험해볼 때는 Code node 모드를 각 아이템마다 한 번 실행으로 설정해야 합니다.
프로젝션으로 요소 컬렉션에 JMESPath 표현식 적용하기#
프로젝션은 JMESPath의 핵심 기능 중 하나입니다. 요소 컬렉션에 표현식을 적용하는 데 사용합니다. JMESPath는 다섯 가지 종류의 프로젝션을 지원합니다:
- 리스트 프로젝션
- 슬라이스 프로젝션
- 객체 프로젝션
- 플랫튼 프로젝션
- 필터 프로젝션
다음 예시는 리스트, 슬라이스, 객체 프로젝션의 기본 사용법을 보여줍니다. 각 프로젝션 유형에 대한 자세한 설명과 더 많은 예시는 JMESPath 프로젝션 문서를 참조하세요.
웹훅 노드에서 다음 JSON이 주어졌을 때:
[
{
"headers": {
"host": "n8n.instance.address",
...
},
"params": {},
"query": {},
"body": {
"people": [
{
"first": "James",
"last": "Green"
},
{
"first": "Jacob",
"last": "Jones"
},
{
"first": "Jayden",
"last": "Smith"
}
],
"dogs": {
"Fido": {
"color": "brown",
"age": 7
},
"Spot": {
"color": "black and white",
"age": 5
}
}
}
}
]
모든 사람의 이름 목록 가져오기:
{{$jmespath($json.body.people, "[*].first" )}}
// Returns ["James", "Jacob", "Jayden"]
let firstNames = $jmespath($json.body.people, "[*].first" )
return {firstNames};
/* Returns:
[
{
"firstNames": [
"James",
"Jacob",
"Jayden"
]
}
]
*/
firstNames = _jmespath(_json.body.people, "[*].first" )
return {"firstNames":firstNames}
"""
Returns:
[
{
"firstNames": [
"James",
"Jacob",
"Jayden"
]
}
]
"""
{{$jmespath($json.body.people, "[:2].first")}}
// Returns ["James", "Jacob"]
let firstTwoNames = $jmespath($json.body.people, "[:2].first");
return {firstTwoNames};
/* Returns:
[
{
"firstNames": [
"James",
"Jacob",
"Jayden"
]
}
]
*/
firstTwoNames = _jmespath(_json.body.people, "[:2].first" )
return {"firstTwoNames":firstTwoNames}
"""
Returns:
[
</div>
</div> {
"firstTwoNames": [
"James",
"Jacob"
]
}
]
"""
```
[객체 프로젝션](https://jmespath.org/tutorial.html#object-projections)을 사용하여 개들의 나이 목록 가져오기:
<div class="tabs-container" data-tabs><div class="tabs-nav"><button class="tab-button active" data-tab-index="0">Expressions (JavaScript)</button><button class="tab-button" data-tab-index="1">Code node (JavaScript)</button><button class="tab-button" data-tab-index="2">Code node (Python)</button></div><div class="tab-panel active" data-tab-index="0">
```js
{{$jmespath($json.body.dogs, "*.age")}}
// Returns [7,5]
let dogsAges = $jmespath($json.body.dogs, "*.age");
return {dogsAges};
/* Returns:
[
{
"dogsAges": [
7,
5
]
}
]
*/
dogsAges = _jmespath(_json.body.dogs, "*.age")
return {"dogsAges": dogsAges}
"""
Returns:
[
{
"dogsAges": [
7,
5
]
}
]
"""
Multiselect를 사용하여 JSON 객체에서 요소를 선택하고 새 목록 또는 객체로 결합합니다.
웹훅 노드에서 다음 JSON이 주어졌을 때:
[
{
"headers": {
"host": "n8n.instance.address",
...
},
"params": {},
"query": {},
"body": {
"people": [
{
"first": "James",
"last": "Green"
},
{
"first": "Jacob",
"last": "Jones"
},
{
"first": "Jayden",
"last": "Smith"
}
],
"dogs": {
"Fido": {
"color": "brown",
"age": 7
},
"Spot": {
"color": "black and white",
"age": 5
}
}
}
}
]
multiselect 리스트를 사용하여 이름과 성을 가져오고 두 이름이 모두 포함된 새 목록 만들기:
{{$jmespath($json.body.people, "[].[first, last]")}}
// Returns [["James","Green"],["Jacob","Jones"],["Jayden","Smith"]]
let newList = $jmespath($json.body.people, "[].[first, last]");
return {newList};
/* Returns:
[
{
"newList": [
[
"James",
"Green"
],
[
"Jacob",
"Jones"
],
[
"Jayden",
"Smith"
]
]
}
]
*/
newList = _jmespath(_json.body.people, "[].[first, last]")
return {"newList":newList}
"""
Returns:
[
{
"newList": [
[
"James",
"Green"
],
[
"Jacob",
"Jones"
],
[
"Jayden",
"Smith"
]
]
}
]
"""
예를 들어, Code node에서 아래 코드를 반환하여 입력 데이터를 생성합니다:
return[
{
"json": {
"num_categories": "0",
"num_products": "45",
"category_id": 5529735,
"parent_id": 1407340,
"pos_enabled": 1,
"pos_favorite": 0,
"name": "HP",
"description": "",
"image": ""
}
},
{
"json": {
"num_categories": "0",
"num_products": "86",
"category_id": 5529740,
"parent_id": 1407340,
"pos_enabled": 1,
"pos_favorite": 0,
"name": "Lenovo",
"description": "",
"image": ""
}
}
]
"Lenovo라는 이름의 아이템을 찾고 카테고리 ID를 알려주세요"와 같은 검색을 할 수 있습니다.
{{ $jmespath($("Code").all(), "[?json.name=='Lenovo'].json.category_id") }}
