2017-03-15 4 views
0

내 경로를 클래스 명을 필터링 할낙타 jsonpath는 JSON 클래스 이름을 필터링하는 경로

 <route> 
      <from uri="file:D:/inputFolder/jsonpath"/> 
      <choice> 
       <when> 
       <jsonpath>$..com.mycompany.app10.Person</jsonpath> 
       <to uri="file:D:/inputFolder/jsonpath/output"/> 
       </when> 
      </choice> 
     </route> 

내 샘플 입력, 내 경로에서

{"com.mycompany.app10.Person":{"firstName":"Gregory","surname":"Smith","type":"FAMILY"}} 

입니다 .. 사람 "json으로 경로 내 입력은

{"사람 ": {"firstName을 ":"그레고리 ","성 ":"스미스 ","유형 ":"가족 "}}

잘 작동합니다!

경로가있는 classname이 작동하지 않지만 이에 대한 해결 방법이 있습니까?

답변

0

도트는 JSONPath 표현식의 연산자입니다. 요소에 com.mycompany.app10.Person과 같은 이름의 도트를 일치 시키려면 표현식에서 점을 이스케이프해야합니다.

$..Personcom.mycompany.app10.Person과 일치하지 않습니다. 일치시킬 요소는 정규화 된 클래스 이름입니다. 점은 요소 이름의 일부이며 JSON 문서의 구조와 관련이 없습니다.

클래스 이름을 일치 시키려면 JSONPath 표현식을 $..['com.my.company.app10.Person']으로 변경해야합니다. 또는 클래스 이름으로 $['com.my.company.app10.Person']이 루트입니다.

JSONPath 표현식에서 연산자 문자를 이스케이프 처리하는 것에 대한 내용은 SO thread을 참조하십시오.

+0

$ .. [ 'com.my.company.app10.Person'] 또는 와 같은 제안 된 JSONPath 표현식을 사용하는 경우> $ [ 'com.my.company.app10.Person' ] 둘 다 작동하지 않습니다 – goku

+0

아마도 Camel의 구현입니까? 나는 그것이 [https://jsonpath.curiousconcept.com/](https://jsonpath.curiousconcept.com/) – Ralf

+0

내 입력 { "com.mycompany.app10.Person": { "{ firstName ":"Gregory ","surname ":"Smith ","type ":"FAMILY "}} 작동하지 않습니다. 당신이 시도한 입력은 무엇입니까? – goku