如何从同一级别的 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"
短路。
如果您必须对同一个数据文件进行多次此类查找,可能会使
将数据塑造成更好的形式以用于您正在进行的查找
(例如,将其转换为两个查找键的地图)
我有一个 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" 短路。
如果您必须对同一个数据文件进行多次此类查找,可能会使 将数据塑造成更好的形式以用于您正在进行的查找 (例如,将其转换为两个查找键的地图)