根据价格设置产品名称,如果价格为零或-1或为空则忽略这些产品

Set the product name based on price, if price is zero or -1 or null ignore those products

您好,我有一大堆具有不同 json 对象的产品。我必须根据价格获取产品名称。如果价格不为零或不为空,则获取该产品。

您正在做的是过滤某个列表。所以它会给你一些结果,但必须存储在某个地方才能进一步使用它。

像这样

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

否则你可以直接return[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();
}

这是脚本:

下面的脚本会遍历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"

您可以快速在线试用此功能Demo

我相信这可以缩短/更常规。但这是我能得到的。