2014-05-22 79 views
3

比方說,我有一個簡單的JSON文件,如下面的JSONPath表達式,爲在Apache的駱駝XML檢查字符串

{ 
    "log": { 
     "host": "blah", 
     "severity": "INFO", 
     "system": "1" 
    } 
} 

我使用Apache的駱駝,這是春季的XML處理和路由JSON文件。我的路由代碼看起來像這樣:

<route> 
    <from uri="file:/TESTFOLDER/input"/> 
    <choice> 
     <when> 
     <jsonpath>$.log?(@.severity == 'WARNING')</jsonpath> 
     <to uri="smtp://(smtpinfo...not important)"/> 
     </when> 
     <otherwise> 
     <to uri="file:/TESTFOLDER/output"/> 
     </otherwise> 
    </choice> 
</route> 

我真的很困惑的部分是JSONPath表達式。我上面的表達式甚至在語法上都不正確,因爲它很難找到你不想通過元素列表進行排序的例子。我的目標是隻發送一封電子郵件,如果日誌的嚴重性是'警告',但我不能拿出表達。

回答

5

這爲我工作用駱駝2.13.1(我查INFO爲您的JSON例子有這個severity;您可以在此根據自己的需要改變):

<jsonpath>$..log[?(@.severity == 'INFO')]</jsonpath> 

注意..[]。然而,使用單點.在搜索路徑的開始失敗:

<jsonpath>$.log[?(@.severity == 'INFO')]</jsonpath> 

錯誤消息說:

java.lang.IllegalArgumentException: Invalid container object 

這可能是一個錯誤。

根據JSON路徑doc,..代表「遞歸下降」。這可能不符合您的要求。然而,作爲一個單一的點.沒有工作,這是我想出的唯一可能的工作。否則,你可能會增加一個錯誤票。

+0

它似乎工作,但是很奇怪,單點不起作用,因爲doc中的示例似乎在類似的情況下使用它。 –