我编写了一个脚本来检索某些值file.json.如果我向jq提供值,它可以工作select,但变量似乎不起作用(或者我不知道如何使用它).
#!/bin/sh
#this works ***
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="myemail@hotmail.com") | .id')
echo "$projectID"
EMAILID=myemail@hotmail.com
#this does not work *** no value is printed
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="$EMAILID") | .id')
echo "$projectID"
Run Code Online (Sandbox Code Playgroud) 解决:感谢S.Richmond的回答.我需要取消设置所有存储的groovy.json.internal.LazyMap类型的映射,这意味着使变量envServers和object使用后无效.
附加:搜索此错误的人可能有兴趣使用Jenkins管道步骤readJSON- 在此处查找更多信息.
我正在尝试使用Jenkins Pipeline从用户那里获取输入,该输入作为json字符串传递给作业.然后Pipeline使用slurper解析它,我挑选出重要的信息.然后,它将使用该信息与不同的作业参数并行多次运行1个作业.
直到我添加下面的代码"## Error when below here is added"脚本运行正常.即使是该点下面的代码也会自行运行.但合并后,我得到以下错误.
我应该注意到被触发的作业被调用并且确实成功运行但是发生了以下错误并且失败了主要作业.因此,主要工作不会等待触发作业的返回.我可以尝试/捕捉周围build job:但我希望主要工作等待触发的工作完成.
谁能在这里协助?如果您需要更多信息,请告诉我们.
干杯
def slurpJSON() {
return new groovy.json.JsonSlurper().parseText(BUILD_CHOICES);
}
node {
stage 'Prepare';
echo 'Loading choices as build properties';
def object = slurpJSON();
def serverChoices = [];
def serverChoicesStr = '';
for (env in object) {
envName = env.name;
envServers = env.servers;
for (server in …Run Code Online (Sandbox Code Playgroud) 我正在寻找有效的方法来搜索与过滤器匹配的“子对象”的大型 JSON 对象(select()我想是通过)。然而,顶级 JSON 是一个包含任意嵌套的对象,包括更简单的值、对象和对象数组。例如:
{
"name": "foo",
"class": "system",
"description": "top-level-thing",
"configuration": {
"status": "normal",
"uuid": "id"
},
"children": [
{
"id": "c1",
"class": "c1",
"children": [
{
"id": "c1.1",
"class": "c1.1"
},
{
"id": "c1.1",
"class": "FINDME"
}
]
},
{
"id": "c2",
"class": "FINDME"
}
],
"thing": {
"id": "c3",
"class": "FINDME"
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个解决方案,它确实的一部分我想要的(并且是可以理解的):
jq -r '.. | arrays | .[] | select(.class=="FINDME"?) | .id'
Run Code Online (Sandbox Code Playgroud)
返回:
c2
c1.1
Run Code Online (Sandbox Code Playgroud)
...然而,它错过了c3,而且它改变了项目输出的顺序。此外,我希望这可以在可能非常大的 JSON …
我有一个要在 JQ 中选择的值列表。也就是说,我的 JSON 看起来像这样:
[
{
"id": "a"
},
{
"id": "b"
},
{
"id": "z"
}
]
Run Code Online (Sandbox Code Playgroud)
我的值列表类似于a b c. 此列表在 bash 中存储为标量变量(非硬编码)。如何从此值列表中从 JSON 中选择相应的对象?
我已经看到其他关于使用值在 JQ 查询中选择某些内容的问题,但在此之前我还没有看到基于多个值在 JQ 中选择的示例。例如,在给定的值列表中选择 JSON。