Curl从输出中获取特定值

时间:2015-06-29 20:36:19

标签: json linux loops curl awk

如果我运行它,我有一个curl命令,输出如下,

{
  "page" : 1,
  "records" : 1,
  "total" : 1,
  "rows" : [ {
    "automated" : true,
    "collectionProtocol" : "MagBead Standard Seq v2",
    "comments" : "",
    "copy" : false,
    "createdBy" : "stest",
    "custom1" : "User Defined Field 1=",
    "custom2" : "User Defined Field 2=",
    "custom3" : "User Defined Field 3=",
    "custom4" : "User Defined Field 4=",
    "custom5" : "User Defined Field 5=",
    "custom6" : "User Defined Field 6=",
    "description" : null,
    "editable" : false,
    "expanded" : false,
    "groupName" : "99111",
    "groupNames" : [ "all" ],
    "inputCount" : 1,
    "instrumentId" : 1,
    "instrumentName" : "42223",
    "jobId" : 11111,
    "jobStatus" : "In Progress",
    "leaf" : true,
    "modifiedBy" : null,
    "name" : "Copy_of_Test_Running2"
  } ]
}

我想只提取jobId的值。 此输出将

  11111

如果有多行,则有多个jobId

  11111
  11112
  11113

我想在while循环中仅提取jobId和process。 如下,

 while read job; do
 echo $job
 done < < (curl command)

我希望在另一个命令中使用该作业ID。 卷曲的结果可能是多重的。

您是否有想法轻松提取卷曲输出并进行一段时间或循环?

1 个答案:

答案 0 :(得分:1)

我认为words[i](感谢@Mircea)是一个很好的解决方案。

此外,只有当curl的输出格式是纪律性的并且没有任何脏符号时,我才能提供简单的public String nthShortWord(String[] words, int n) { int nthShortWord = 0; for (int i = 0; i < words.length; i++) { if (words[i].length()<=3) nthShortWord++; if (nthShortWord==n) return words[i]; } return ""; } 解决方案。

所以,请小心使用它:

jq