2017-12-29 9 views
3

나는 다음과 같은 JSON 형식을 가지고있다 -JSON에서 특정 배열 노드를 가져오고 groovy를 사용하여 하나씩 인쇄하는 방법은 무엇입니까?

{ 
"id": "102", 
"brand": "Disha", 
"book": [{ 
    "slr": "EFTR", 
    "description": "Grammer", 
    "data": "TYR", 
    "rate": true, 
    "numberOfPages": 345, 
    "maxAllowed": "12", 
    "currentPage": 345 
    }, 
    { 
    "slr": "EFRE", 
    "description": "English", 
    "data": "TYR", 
    "rate": true, 
    "numberOfPages": 345, 
    "maxAllowed": "12", 
    "currentPage": 345 
    }, 
    { 
    "slr": "BGTR", 
    "description": "French", 
    "data": "TYR", 
    "rate": true, 
    "numberOfPages": 345, 
    "maxAllowed": "12", 
    "currentPage": 345 
    }] 
} 

내가 책 배열을 가져 와서 하나 하나를 인쇄 할 수있는 그루비 코드를 작성하려면 그 전에 나는 또한 책의 배열 노드를 계산해야합니다.

나는 코드 아래 시도 : - : net.minidev.json.parser.ParseException :

com.jayway.jsonpath.InvalidJsonException로

def response = context.expand('${book#Response}'); 
def slurper = new JsonSlurper(); 
String inputJSON = slurper.parseText(response) 
def strFinalValueToRead = "\$." + "book[0]" 
def strActualValue = parse(inputJSON).read(strFinalValueToRead).toString() 

log.info strActualValue 

나는 점점 오전 오류의 예기치 않은 종료 파일.

도움이 될만한 정보가 있으면 알려주세요.

+0

코드는 내 컴퓨터에서 제공 한 json을 사용하여 작동합니다. – aristotll

+0

모르겠다. JSON 용 외부 jar 파일이 누락되었을 수있다. 그러나 나는 이것을 복제 할 수 없다. – avidCoder

+0

@Ashuans, 내 솔루션이 도움이되는지 확인하십시오. – Rao

답변

1

사용할 수 Script Assertion .

스크립트 어설

assert context.response, 'Response is empty or null' 

def json = new groovy.json.JsonSlurper().parseText(context.response) 
log.info json.book 

위의 로그 모든 책의 세부 사항을.

index를 사용하여 0 책자에 책보기와 같은 특정 책 세부 정보를 표시 할 수도 있습니다.

log.info json.book[0] 

또한 몇 가지 필터를 기반으로 특정 책을 찾을 수있다. 예를 들어 descriptionGrammer 인 책을 찾습니다.

log.info json.book.find {it.description == 'Grammer'} 
+0

여기에서 나는 내가 얻을 반응에 대해 확신하지 않는다. 책 배열에있는 책의 노드 수 또는 요소 수는 다를 수 있습니다. 그래서, 위의 경우는 작동하지 않을 수 있습니다. @Rao – avidCoder

+0

위의 어느 부분이 작동하지 않습니까? 0 번째 색인을 기록하는 방법을 보여 줬습니다. 모든 책을 표시하려면 for 루프를 작성할 필요가 없습니다. 스크립트 단언을보십시오. – Rao

+0

아, 내 예약 번호가 동적 일 수있는 예약되지 않은 번호로 예약했으면합니다. 그리고 저는 그것들 모두가 인쇄되기를 바랍니다. – avidCoder

0

마지막으로, 많은 노력을 기울여야합니다. 나는 해결책을 얻었고 Map과 List로 시도했다.

또 다른 추가 끝내 단계를 피할 수 같은 REST 요청 테스트 단계에 대한
Object inputJSON = slurper.parseText(response) 

def countBook = inputJSON.book.size() 

for(int i=0; i<countBook; i++) { 
Map result = (Map) inputJSON 
List bookNode = result.get("book") 
log.info bookNode[i]  

} 
1
Map m = new groovy.json.JsonSlurper().parseText(json) 
m.book.each{println it} 

이 충분하다.

관련 문제