2014-07-08 2 views
0

api 호출에서지도로 반환 된 일부 json 요소에 액세스하려고하므로 다른 API 호출에 전달할 수 있습니다. 나는 적절하게 변수를 만들고 필요한 값을 줄 수는 없다. 반환 된 json이 있는데, Id 요소에 액세스해야합니다.groovy지도에서 JSON 요소에 액세스

{ 
     "totalSize": 1, 
     "done": true, 
     "records": [ 
     { 
      "attributes": { 
      "type": "User", 
      "url": "/services/data/v24.0/sobjects/User/MYIDNUMBER" 
      }, 
      "Id": "MYIDNUMBER" 
     } 
     ] 
    } 

여기에 편안한 서비스 내가 사용하는 전화와 id 요소에 액세스하고 그래서 나의 다음 API 호출에서 사용할 수 SFID에 넣어 내 시도이다

 def http = new HTTPBuilder(instance_domain) 
     http.request(GET,JSON) { req -> 
     uri.path = "services/data/v24.0/query/" 
     uri.query = [q:"SELECT Id from User WHERE Email = '[email protected]'"] 
     headers['Authorization'] = "Bearer $access_token" 
      response.success = { resp, json -> 
      json.each{ key,value -> 
      sfMap = [sfUser: [json: json]] 
       } 
      sfId = sfMap[records.Id] 
      } 
      response.failure = { resp, json -> 
        println resp.status 
        println json.errorCode 
        println json.message 
       }     
      } 

나는 다음과 같은 오류에 얻을 이 포틀릿 버전이 배포 된 서버

2014-07-08 08:02:39,710 ERROR [http-bio-443-exec-161] portal-web.docroot.html.portal.render_portlet_jsp:154 groovy.lang.MissingPropertyException: No such property: records for class: groovyx.net.http.HTTPBuilder$RequestConfigDelegate 
+0

'json.records.Id'가 아니어야합니까? – Will

+0

그게 내가 생각했을거야. 매우 일찍 시도했고 2014-07-08 08 : 24 : 54,735 오류 [http-bio-443-exec-170] portal-web.docroot.html.portal.render_portlet_jsp : 154 java.lang.NullPointerException' – Baci

답변

1

json 구조를 기반으로 할 수있는 내용은 다음과 같습니다. records은 잠재적으로 객체 수를 포함 할 수있는 배열이므로 Id의 수입니다.

def json = new groovy.json.JsonSlurper().parseText (""" 
    { 
      "totalSize": 1, 
      "done": true, 
      "records": [ 
      { 
       "attributes": { 
       "type": "User", 
       "url": "/services/data/v24.0/sobjects/User/MYIDNUMBER" 
       }, 
       "Id": "MYIDNUMBER" 
      } 
      ] 
    } 

""") 

당신이 첫 번째 요소의 ID에 대한 확신한다면,이 트릭 할 것입니다 :

println json.records.first().Id 

그렇지 않으면,이 records 당신에게 모든 객체의 Id들 줄 것이다 더 나은 옵션이 될 수 있습니다.

println json.records.collect{ it.Id } 
0

@kunal.

나중에 참조 할 수 있도록 나중에 나중에 사용할 수있는 변수의 delcaration을 추가하여 json 응답의 값을 할당하는 방법을 설명합니다.

def http = new HTTPBuilder(instance_domain) 
http.request(GET,JSON) { req -> 
uri.path = "services/data/v24.0/query/" 
uri.query = [q:"SELECT Id from User WHERE Email = '[email protected]'"] 
headers['Authorization'] = "Bearer $access_token" 
    response.success = { resp, json -> 
    sfId = json.records.first().Id <----- this did the trick 
    json.each{ key,value -> 
    sfMap = [sfUser: [json: json]] 
     } 
    } 
    response.failure = { resp, json -> 
      println resp.status 
      println json.errorCode 
      println json.message 
     }     
    }