Я использую верблюд с JSonPath - зависимость устанавливает версию 0.9.1
Я пытаюсь создать маршрут на основе контента на основе jsonpath.
<choice>
<when>
<jsonpath>$.(?(@.headerKey == 'reports'))</jsonpath>
<to uri="direct:echoProcessorReports"/>
</when>
<otherwise>
<to uri="direct:echo"/>
</otherwise>
</choice>
Документ, который будет проверен, выглядит следующим образом:
{"headerKey":"reports","data":[{"name":"reports0"},{"name":"reports1"},{"name":"reports2"},{"name":"reports3"},{"name":"reports4"}]}
Я не смог зафиксировать синтаксис для этого. Я пробовал различные комбинации, используя библиотеки jsonpath напрямую:
import com.jayway.jsonpath.JsonPath;
import org.apache.camel.jsonpath.JsonPathEngine;
/**
* Created by mhampton on 1/29/15.
*/
public class CrapTest {
public static void main(String[] args) {
String data = "{" +
"\"headerKey\":\"reports\"," +
"\"data\":" +
"[{\"name\":\"reports0\"},{\"name\":\"reports1\"},{\"name\":\"reports2\"},{\"name\":\"reports3\"},{\"name\":\"reports4\"}]}";
JsonPath path = JsonPath.compile("$.");
Object result = path.read(data); //net.minidev.json.JSONObject
System.out.println(result);
path = JsonPath.compile("$.headerKey");
result = path.read(data);
System.out.println(result);
path = JsonPath.compile("$.headerKey(?@ == 'reports)");
result = path.read(data);
System.out.println(result);
path = JsonPath.compile("$(?(@.headerKey == 'reports'))");
result = path.read(data);
System.out.println(result);
path = JsonPath.compile("$.[*]");
result = path.read(data);
System.out.println(result);
}
}
И мне удалось извлечь значение ("$.headerKey"), но я не могу заставить выражение фильтра работать для него.
Любая помощь очень ценится.