【问题标题】:Filtering/Selecting array values from index in Json in groovy在 groovy 中从 Json 中的索引中过滤/选择数组值
【发布时间】:2021-02-23 19:16:16
【问题描述】:

尝试过滤选择性索引。 Fieldid 值随着每次构建而变化,不变的是fieldName": "TX.Sessionval.cost"。需要过滤掉整个stringval并保存到变量中

fieldName": "TX.Sessionval.cost"
[
  {
   "Fieldid": "Fieldid/112",
    "fieldName": "TX.Sessionval.cost",
    "stringval": "jklah-dw-4c8d-8320-das313s3ASsda|000725N8WuUrfwAS7alP|banker_name"
  }
]

试过def slurper = new JsonSlurper() def result = slurper.parseText(response.getResponseBodyContent()) def newf = result.findAll { it.contains("TX.Sessionval.cost") }得到groovy.lang.MissingMethodException:没有方法签名:java.util.LinkedHashMap$Entry.contains()

在邮递员定位器中工作正常

postman.setEnvironmentVariable("Stdid", jsonData.newFields[112].stringValue)

【问题讨论】:

  • 错误是由于迭代地图。 result 很可能不包含您认为它包含的内容(例如,json 不是数组,而是顶层对象)。
  • 结果确实有` "Fieldid": "Fieldid/112", "fieldName": "TX.Sessionval.cost", "stringval": "jklah-dw-4c8d-8320-das313s3ASsda| 000725N8WuUrfwAS7alP|banker_name" ` 在 newFields[112] 下,但它每次都更改,因此需要使用 katalon 搜索整个 JSON 输出。
  • 所以,您的result 只包含一张地图,没有包装数组。老实说,我无法理解您想要实现的目标.. 但是如果您想从映射中删除值不包含“TX ...”的所有键:result.findAll{ ! it.value.contains("TX.Sessionval.cost") }
  • 您的示例 JSON 是 list 中的 map。你得到的错误是result 的一个元素是一个 map entry - 所以很明显你正在共享的 JSON 和你实际阅读的 JSON 之间存在差异。
  • JSON 结果很大,只是根据我用于postman.setEnvironmentVariable("Stdid", jsonData.newFields[112].stringValue) 的内容来寻找解决方案,但由于每次都会更改值,例如 Fieldid": "Fieldid/112, Fieldid": "Fieldid/ 123, Fieldid": "Fieldid/129 然后每次都要手动编辑它而不是过滤到特定的搜索当 fieldName": "TX.Sessionval.cost" 是这个打印字符串值

标签: arrays arraylist groovy katalon-studio groovy-console


【解决方案1】:

您问题中的 JSON 是错误的。从你的工作中推断 代码,这应该可以工作:

result.newFields.find{ it.fieldName == "TX.Sessionval.cost" }?.stringValue

【讨论】:

  • @cfick,有问题更新什么更有意义,更新一样
  • console 在打印时给我 null,只是在检查 Json 路径时添加它给我 x.newFields[112].stringValue。
  • customFields(filter((a)==a.fieldName=='TX.Sessionval.cost')[0].stringValue)) 这适用于邮递员
  • 第一个 newFields 有效,现在 customFields 有效...您是否尝试将其应用于我的答案?
  • 是的,您的解决方案适用于邮递员。但它不适用于 groovy newFields ignore customfield 抱歉。
【解决方案2】:

这对我有用result.newFields.findAll { Map map -> map.get("fieldName").contains("TX.Sessionval.cost") }?.stringValue

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多