21장. JsonPath
21.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
JsonPath 언어는 JSON 메시지의 일부를 추출하기 위한 편리한 구문을 제공합니다. JSON 구문은 Cryostat와 유사하지만 XML에서 작동하는 대신 JSON 메시지에서 JSON 오브젝트를 추출하는 데 사용됩니다. jsonpath
DSL 명령은 표현식 또는 서술자로 사용할 수 있습니다(이 경우 빈 결과가 부울 false
로 해석됨).
21.2. JsonPath 패키지 추가 링크 복사링크가 클립보드에 복사되었습니다!
Camel 경로에서 JsonPath를 사용하려면 다음과 같이 camel-jsonpath
에 대한 종속성을 프로젝트에 추가해야 합니다.
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jsonpath</artifactId> <version>${camel-version}</version> </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jsonpath</artifactId>
<version>${camel-version}</version>
</dependency>
21.3. Java 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 Java 예제에서는 jsonpath()
DSL 명령을 사용하여 특정 가격 범위에서 항목을 선택하는 방법을 보여줍니다.
JsonPath 쿼리에서 빈 세트를 반환하는 경우 결과가 false
로 해석됩니다. 이렇게 하면 JsonPath 쿼리를 서술자로 사용할 수 있습니다.
21.4. XML 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 XML 예제에서는 jsonpath
DSL 요소를 사용하여 경로에 서술자를 정의하는 방법을 보여줍니다.
21.5. 쉬운 구문 링크 복사링크가 클립보드에 복사되었습니다!
jsonpath
구문을 사용하여 기본 서술자를 정의하려는 경우 구문을 기억하는 것이 다소 어려울 수 있습니다. 예를 들어 모든 저렴한 서적을 찾으려면 다음과 같이 구문을 작성해야 합니다.
$.store.book[?(@.price < 20)]
$.store.book[?(@.price < 20)]
그러나 다음과 같이 작성할 수 있는 경우 어떻게 해야 합니까?
store.book.price < 20
store.book.price < 20
price 키가 있는 노드를 확인하려는 경우 경로를 생략할 수도 있습니다.
price < 20
price < 20
이를 지원하기 위해 기본 스타일을 사용하여 서술자를 정의하는 데 사용하는 easyPredicateParser
가 있습니다. 즉, 서술자는 $
기호로 시작하지 않아야 하며 하나의 연산자만 포함해야 합니다. 쉬운 구문은 다음과 같습니다.
left OP right
left OP right
올바른 Operator에서 Camel 간단한 언어를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
store.book.price < ${header.limit}
store.book.price < ${header.limit}
21.6. 지원되는 메시지 본문 유형 링크 복사링크가 클립보드에 복사되었습니다!
Camel JSonPath는 다음 유형을 사용하여 메시지 본문을 지원합니다.
유형 | 설명 |
---|---|
파일 | 파일에서 읽기 |
문자열 | 일반 문자열 |
map |
essage body as |
list | Message body as java.util.List 유형 |
|
jackson이 classpath에 있는 경우 |
|
위의 유형이 일치하지 않는 경우 Camel은 메시지 본문을 |
메시지 본문이 지원되지 않는 형식인 경우 기본적으로 예외가 발생하지만 JSonPath를 구성하여 예외를 억제할 수 있습니다.
21.7. 예외 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
jsonpath
표현식에서 구성한 경로를 찾을 수 없는 경우 JSONPath가 예외를 throw합니다. SuppressExceptions
옵션을 true로 설정하여 예외를 무시할 수 있습니다. 예를 들어 아래 코드에서 jsonpath
매개변수의 일부로 true 옵션을 추가합니다.
XML DSL에서 다음 구문을 사용합니다.
21.8. JSONPath 삽입 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat 통합을 사용하여 Quarkus 메서드를 호출할 때 JsonPath를 사용하여 메시지에서 값을 추출하고 메서드 매개 변수에 바인딩할 수 있습니다. 예를 들면 다음과 같습니다.
21.9. 인라인 간단한 표현식 링크 복사링크가 클립보드에 복사되었습니다!
Camel 2.18의 새로운 기능.
Camel은 JsonPath
표현식에서 인라인 단순
표현식을 지원합니다. 간단한
언어 삽입은 다음과 같이 간단한
구문으로 표현해야 합니다.
아래 표시된 대로 allow
옵션을 설정하여 단순 표현식에 대한 지원을 끕니다.
Simple
=false
Java:
// Java DSL .when().jsonpath("$.store.book[?(@.price < 10)]", false, false)
// Java DSL
.when().jsonpath("$.store.book[?(@.price < 10)]", false, false)
XML DSL:
// XML DSL <jsonpath allowSimple="false">$.store.book[?(@.price < 10)]</jsonpath>
// XML DSL
<jsonpath allowSimple="false">$.store.book[?(@.price < 10)]</jsonpath>
21.10. reference 링크 복사링크가 클립보드에 복사되었습니다!
JsonPath에 대한 자세한 내용은 JSonPath 프로젝트 페이지를 참조하십시오.