2017-04-06 72 views

回答

1

下面是腳本:

下面的腳本會遍歷通的JSON和提取產品名稱在有價格的地方也放入數據放入一張名爲productPriceMap的地圖中,以後可以使用。

def productPriceMap = [:] 
def jsonParsed = new groovy.json.JsonSlurper().parseText(json) 
jsonParsed.products.collect{ product -> 
    product.productRatePlans.collect { ratePlan -> 
     ratePlan.productRatePlanCharges.collect { charge -> 
      charge.productRatePlanChargeTiers.collect{ tier -> 
       if (tier.price) { 
        log.info "${tier.price} - ${product.name}" 
        productPriceMap[product.name] = tier.price 
       } 
      } 
     } 
    } 
} 
log.info "Product and price map\n$productPriceMap" 

enter image description here

您可以快速地嘗試這個網上Demo

我相信這可以縮短/更groovified。但這是我能夠得到的。

0

你正在做的是過濾某個列表。所以它會給你一些結果,但必須存儲在某個地方以進一步使用它。

喜歡這個

def toList(priceNullCheck){ 
    def filteredList = [priceNullCheck].flatten().findAll { it != null} 
    log.info filteredList 
} 

否則,您可以返回[priceNullCheck].flatten().findAll { it != null}直接

修訂

import javax.xml.transform.Transformer 
import javax.xml.transform.TransformerFactory 
import javax.xml.transform.dom.DOMSource 
import javax.xml.transform.stream.StreamResult 

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def response = groovyUtils.getXmlHolder("TestRequest#Response") 

def collectResult = [] 

use (groovy.xml.dom.DOMCategory) { 
for(node in response.getDomNodes("//*:products//*:e")) { 
    def eachNodeAsXml = groovyUtils.getXmlHolder(nodeToString(node)) 
    String priceTagValue = eachNodeAsXml.getNodeValue("//*:price") 
    float price = priceTagValue?Float.parseFloat(priceTagValue):0 
    if(price>0) 
     collectResult.add(eachNodeAsXml.getNodeValue("/*:name")) 
    } 
} 

println collectResult 

def nodeToString(def node) 
{ 
    StringWriter writer = new StringWriter(); 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.transform(new DOMSource(node), new StreamResult(writer)); 
    return writer.toString(); 
} 
+0

但是我沒有得到我期待的東西,首先獲取所有的價格值一個字符串,然後將其轉換爲列表,然後我必須檢查價格不等於零,或者小於0,然後null.then必須設置產品名稱 – Prathyusha

+0

哦!我以爲你只有該片段的問題:D無論如何,請嘗試發佈代碼。 –

相關問題