콘텐츠로 이동
📣 인포그랩에서 OpenAI 기술 기반으로 자체 개발한 자동화 번역 프로그램을 통해 n8n 공식 문서의 한글판을 국내 최초로 제공합니다.

JMESPath로 JSON 쿼리하기#

JMESPath는 JSON 문서에서 요소를 추출하고 변환하는 데 사용할 수 있는 JSON 쿼리 언어입니다. JMESPath 사용 방법에 대한 자세한 내용은 JMESPath 문서를 참조하십시오.

jmespath() 메서드#

n8n은 jmespath()라는 사용자 정의 메서드를 제공합니다. 이 메서드를 사용하여 JMESPath 쿼리 언어를 사용하여 JSON 객체를 검색할 수 있습니다.

기본 구문은 다음과 같습니다:

1
$jmespath(object, searchString)
1
_jmespath(object, searchString)

메서드가 수행하는 작업을 이해하는 데 도움이 되는 동등한 더 긴 JavaScript는 다음과 같습니다:

1
2
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의 자체 문서에서 확인할 수 있습니다.

이 예제를 시도할 때 코드 노드의 모드각 항목에 대해 한 번 실행으로 설정해야 합니다.

프로젝션으로 요소의 컬렉션에 JMESPath 표현식 적용하기#

JMESPath 프로젝션 문서에서 다음과 같습니다:

프로젝션은 JMESPath의 핵심 기능 중 하나입니다. 이를 사용하여 요소의 컬렉션에 표현식을 적용합니다. JMESPath는 다음과 같은 다섯 가지 종류의 프로젝션을 지원합니다:

  • 리스트 프로젝션
  • 슬라이스 프로젝션
  • 객체 프로젝션
  • 플래튼 프로젝션
  • 필터 프로젝션

다음 예제는 리스트, 슬라이스 및 객체 프로젝션의 기본 사용법을 보여줍니다. 각 프로젝션 유형에 대한 자세한 설명 및 더 많은 예제는 JMESPath 프로젝션 문서를 참조하십시오.

웹훅 노드에서 다음과 같은 JSON이 주어졌을 때:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[
  {
    "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
        }
      }
    }
  }
]

모든 사람의 이름을 포함하는 리스트를 가져옵니다:

1
2
{{$jmespath($json.body.people, "[*].first" )}}
// 반환: ["James", "Jacob", "Jayden"]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
let firstNames = $jmespath($json.body.people, "[*].first" )
return {firstNames};
/* 반환:
[
	{
		"firstNames": [
			"James",
			"Jacob",
			"Jayden"
		]
	}
]
*/
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
firstNames = _jmespath(_json.body.people, "[*].first" )
return {"firstNames":firstNames}
"""
반환:
[
 	{
		"firstNames": [
			"James",
			"Jacob",
			"Jayden"
		]
	}
]
"""

첫 번째 이름의 슬라이스를 가져옵니다:

1
2
{{$jmespath($json.body.people, "[:2].first")}}
// 반환: ["James", "Jacob"]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
let firstTwoNames = $jmespath($json.body.people, "[:2].first");
return {firstTwoNames};
/* 반환:
[
	{
		"firstNames": [
			"James",
			"Jacob",
			"Jayden"
		]
	}
]
*/
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
firstTwoNames = _jmespath(_json.body.people, "[:2].first" )
return {"firstTwoNames":firstTwoNames}
"""
반환:
[
	{
		"firstTwoNames": [
		"James",
		"Jacob"
		]
	}
]
"""

개체 프로젝션을 사용하여 개의 나이를 나열합니다 객체 프로젝션:

1
2
{{$jmespath($json.body.dogs, "*.age")}}
// 반환: [7,5]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
let dogsAges = $jmespath($json.body.dogs, "*.age");
return {dogsAges};
/* 반환:
[
	{
		"dogsAges": [
			7,
			5
		]
	}
]
*/
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
dogsAges = _jmespath(_json.body.dogs, "*.age")
return {"dogsAges": dogsAges}
"""
반환:
[
	{
		"dogsAges": [
			7,
			5
		]
	}
]
"""

여러 요소 선택 및 새 목록 또는 객체 생성#

Multiselect를 사용하여 JSON 객체에서 요소를 선택하고 이를 새 목록 또는 객체로 결합합니다.

다음은 웹훅 노드에서 가져온 JSON입니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[
  {
    "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 목록을 사용하십시오:

1
2
{{$jmespath($json.body.people, "[].[first, last]")}}
// Returns [["James","Green"],["Jacob","Jones"],["Jayden","Smith"]]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
let newList = $jmespath($json.body.people, "[].[first, last]");
return {newList};
/* Returns:
[
	{
		"newList": [
			[
				"James",
				"Green"
			],
			[
				"Jacob",
				"Jones"
			],
			[
				"Jayden",
				"Smith"
			]
		]
	}
]
*/
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
newList = _jmespath(_json.body.people, "[].[first, last]")
return {"newList":newList}
"""
Returns:
[
	{
		"newList": [
			[
				"James",
				"Green"
			],
			[
				"Jacob",
				"Jones"
			],
			[
				"Jayden",
				"Smith"
			]
		]
	}
]
"""

표현식에서 화살표 함수의 대안#

예를 들어, 다음 코드를 코드 노드에서 반환하여 입력 데이터를 생성할 수 있습니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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를 알려주세요."와 같은 검색을 수행할 수 있습니다.

1
{{ $jmespath($("Code").all(), "[?json.name=='Lenovo'].json.category_id") }}
인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!