2016-07-19 2 views
4

질문 :옵션 JsonPath 사용 Jayway

내가 입력으로 JSON 문자열에 걸리는 서비스가있다. JSON 스키마는 일부 필드가 항상 존재하지 않을 때마다 다릅니다. Jayway의 JsonPath이있을 때이 필드의 값을 어떻게 쿼리 할 수 ​​있습니까?

가 나는 무엇을 시도했다 :

내가 경로가 발견되지 않는 경우 Jayway의 readme page

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); 
     } 
    } 
} 

을 설명 Option.DEFAULT_PATH_LEAF_TO_NULL으로이 JsonPath.read() 반환 null을해야 사용하지만 내 코드는 여전히 발생합니다 :

com.jayway.jsonpath.PathNotFoundException : 누락 된 pr 경로 [% s '의 somepath]

내가 존재하지 않는 경로를 지정했을 때. 아무도 이것이 무엇을 일으키는 지 알고 있습니까?

답변

3

나는 내가 잘못한 것을 깨달았다. DEFAULT_PATH_LEAF_TO_NULL 옵션은 리프 노드 만 처리합니다. 예를 들어 : TMP가 잎 노드로 생각 될 때 $.foo.tmp 쿼리 할

{ 
    "foo":{ 
     "bar":"value" 
    } 
} 

경우

샘플 JSON, JsonPath는 null를 반환합니다.

$.tmp.tmp2 쿼리 할 경우 TMP가 잎하지 않고 존재하지 않는 한, JsonPath가

com.jayway.jsonpath.PathNotFoundException 발생합니다.

이것을 우회하려면 Option.SUPPRESS_EXCEPTIONS을 사용해야합니다.