Необязательный JsonPath с использованием Jayway
вопрос:
у меня есть служба, которая принимает в JSON
строку в качестве входных данных. The JSON
схема отличается каждый раз, когда некоторые поля не всегда присутствуют. Как я могу запросить значения этих полей, используя jayway's JsonPath
когда они присутствуют?
что я пробовал:
я использовал Option.DEFAULT_PATH_LEAF_TO_NULL
как Jayway это readme страница объяснил
Configuration config = Configuration.defaultConfiguration()
.addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL);
if (JsonPath.isPathDefinite(attribute.jsonPath))
{
String value = JsonPath.using(config).parse(currentTx).read(attribute.jsonPath);
if (value != null)
{
attributeValues.add(value);
}
}
else
{
List<String> attributeValuesArray = JsonPath.using(config).parse(currentTx).read(attribute.jsonPath);
for (String value : attributeValuesArray)
{
if (value != null)
{
attributeValues.add(value);
}
}
}
это должно сделать JsonPath.read()
вернуться null
если путь не найден, однако мой код все еще бросает:
com.джейвей.помощью jsonpath.PathNotFoundException: отсутствует свойство в path $['somepath']
когда я даю ему несуществующий путь. Кто-нибудь знает, что может быть причиной этого?
1 ответов
я понял, что я сделал неправильно. The DEFAULT_PATH_LEAF_TO_NULL
опция заботится только о листовых узлах. Например:
Образец Json
{
"foo":{
"bar":"value"
}
}
если $.foo.tmp
запрашивается, JsonPath вернет null
as tmp должен быть листовым узлом.
если $.tmp.tmp2
запрашивается, JsonPath будет бросать
com.джейвей.помощью jsonpath.PathNotFoundException как tmp не является листом и отсутствует.
чтобы обойти это, следует использовать Option.SUPPRESS_EXCEPTIONS
.