2017-06-11 76 views
1

我試圖從我的JSON響應中獲取第一個節點值(ResourceItemID即2290)。 我的回答是這樣的:使用Groovy從JSON響應中提取第一個節點值

{ 
    "Success": true, 
    "TotalRecords": 41, 
    "RoomSearchResult": [ 
      { 
     "ResourceItemID": 2290, 
     "Name": "Room 23 (L02)", 
     "LocationId": 7, 
     "GroupID": 518, 
     "FloorID": 2, 
     "DefaultCapacity": 4, 
     "CanBeBooked": true 
     }, 
{ 
     "ResourceItemID": 2063, 
     "Name": "Room 15 (L10)", 
     "LocationId": 7, 
     "GroupID": 518, 
     "FloorID": 10, 
     "DefaultCapacity": 8, 
     "CanBeBooked": true 
     } 
    ], 
    "Error": { 
     "ErrorCode": 0, 
     "ErrorDescription": "" 
    } 
} 

我試過至今:

import groovy.json.JsonSlurper 
def parsed = new JsonSlurper().parseText(json).find().value.RoomSearchResult.ResourceItemID 
+0

你需要在條件匹配提取'ResourceItemID'。 – Rao

+0

不,ResourceItemID可以是任何東西。我只需要在soapui屬性中查找並存儲第一個值。 – rAJ

+0

好的,但有價值清單。 「2290」是您正在尋找的固定價值嗎? – Rao

回答

1

如果你只想要第一個節點值,那麼你不需要手動遍歷整個JSON,你可以解析它來收集並從中獲得第一個節點。

import groovy.json.JsonSlurper 


String jsonString = """ 
    { 
    "Success": true, 
    "TotalRecords": 41, 
    "RoomSearchResult": [ 
      { 
     "ResourceItemID": 2290, 
     "Name": "Room 23 (L02)", 
     "LocationId": 7, 
     "GroupID": 518, 
     "FloorID": 2, 
     "DefaultCapacity": 4, 
     "CanBeBooked": true 
     }, 
     { 
     "ResourceItemID": 2063, 
     "Name": "Room 15 (L10)", 
     "LocationId": 7, 
     "GroupID": 518, 
     "FloorID": 10, 
     "DefaultCapacity": 8, 
     "CanBeBooked": true 
     } 
    ], 
    "Error": { 
     "ErrorCode": 0, 
     "ErrorDescription": "" 
    } 
} 
""" 

JsonSlurper jsonSlurper = new JsonSlurper() 

/** 
* 'jsonString' is the input json you have shown 
* parse it and store it in collection 
*/ 
Map convertedJSONMap = jsonSlurper.parseText(jsonString) 

//If you have the nodes then fetch the first one only 
if(convertedJSONMap."RoomSearchResult"){ 

    println "ResourceItemID : " + convertedJSONMap."RoomSearchResult"[0]."ResourceItemID" 
} 

輸出:

ResourceItemID : 2290 
+0

錯誤: - 沒有這樣的屬性:jsonString類:Script7 – rAJ

+0

請看看更新的答案。現在在上面聲明輸入字符串以便更清晰。 –

+0

謝謝Prakash,但我的迴應並不總是靜態的。它根據我的要求不斷變化。這可能在'jsonString'中傳遞動態響應。 – rAJ

0

首先,您需要導航節點來得到你想要提取,而不是價值的具體節點類型價值第一。導航至ResourceItemID,然後獲取value將返回所有ResourceItemID的值的數組:[2290,2063]。 您可以獲取數組的第一個項目,或者根據值本身查找。 下面的代碼將打印的例子的結果:

[2290, 2063] 2290 2290

def parsed = new JsonSlurper().parseText(json).RoomSearchResult.ResourceItemID.value 
println parsed 
def result = parsed.find{ value -> value == 2290} 
println result 
result = parsed[0] 
println result