如何从同一级别的 json 文件中查找和获取值?

How to find and get values from a json file which are in the same level?

我有一个 JSON 文件,如下所示。我正在获取名称和 product_version 的参数。使用它们我需要得到 relese_version 和最新的布尔值。

例如:- 如果 var1 = section1 var2 = 2.6.0,则 release_version 应被视为 2.6.0.9,最新的 groovy 中为 false。

file.json

{
"platforms": [
    {
      "name": "section1",
      "versions": [
        {
          "product_version": "2.6.0",
          "release_version": "2.6.0.9",
          "latest": false
        },
        {
          "product_version": "3.0.0",
          "release_version": "3.0.0.3",
          "latest": false
        }
      ]
    },
    {
      "name": "section2",
      "versions": [
        {
          "product_version": "2.6.0",
          "release_version": "2.6.0.9",
          "latest": false
        },
        {
          "product_version": "3.0.0",
          "release_version": "3.0.0.3",
          "latest": false
        }
      ]
    }
  ]
}

这是我试过的代码片段。

filename = "file.json"
def jsonSlurper = new JsonSlurper()
parsed_json = jsonSlurper.parse(new File(filename))

release_tag = json.parsed_json.find {platforms.name == "section1".version[].product_version == "2.6.0".release_version}

println release_tag

但这没有用。请帮我解决这个问题

您首先必须通过名称找到平台(这可能会失败);下一个 在版本中找到产品版本。例如

def data = new groovy.json.JsonSlurper().parse("data.json" as File)

def name='section1'
def productVersion = '2.6.0'

// XXX
def result = data.platforms.find{ it.name == name }?.versions?.find{ it.product_version == productVersion }

assert result.release_version == '2.6.0.9'
assert result.latest == false

注意在第一个find后使用"elvis operator" 短路。

如果您必须对同一个数据文件进行多次此类查找,可能会使 将数据塑造成更好的形式以用于您正在进行的查找 (例如,将其转换为两个查找键的地图)