在Shell脚本中循环遍历JSON数组

Sugatur Deekshith SN

下面是curl命令的输出(有关分支的文件信息),需要脚本或命令来打印文件名,文件类型和大小。

我尝试过,jq但能够获取单个值(jq '.values[].size'

{
  "path": {
    "components": [],
    "name": "",
    "toString": ""
  },
  "revision": "master",
  "children": {
    "size": 5,
    "limit": 500,
    "isLastPage": true,
    "values": [
      {
        "path": {
          "components": [
            ".gitignore"
          ],
          "parent": "",
          "name": ".gitignore",
          "extension": "gitignore",
          "toString": ".gitignore"
        },
        "contentId": "c9e472ef4e603480cdd85012b01bd5f4eddc86c6",
        "type": "FILE",
        "size": 224
      },
      {
        "path": {
          "components": [
            "Jenkinsfile"
          ],
          "parent": "",
          "name": "Jenkinsfile",
          "toString": "Jenkinsfile"
        },
        "contentId": "e878a88eed6b19b2eb0852c39bfd290151b865a4",
        "type": "FILE",
        "size": 1396
      },
      {
        "path": {
          "components": [
            "README.md"
          ],
          "parent": "",
          "name": "README.md",
          "extension": "md",
          "toString": "README.md"
        },
        "contentId": "05782ad495bfe11e00a77c30ea3ce17c7fa39606",
        "type": "FILE",
        "size": 237
      },
      {
        "path": {
          "components": [
            "pom.xml"
          ],
          "parent": "",
          "name": "pom.xml",
          "extension": "xml",
          "toString": "pom.xml"
        },
        "contentId": "9cd4887f8fc8c2ecc69ca08508b0f5d7b019dafd",
        "type": "FILE",
        "size": 2548
      },
      {
        "path": {
          "components": [
            "src"
          ],
          "parent": "",
          "name": "src",
          "toString": "src"
        },
        "node": "395c71003030308d1e4148b7786e9f331c269bdf",
        "type": "DIRECTORY"
      }
    ],
    "start": 0
  }
}

预期输出应如下所示

.gitignore    FILE     224

Jenkinsfile   FILE     1396
Lu

对于问题中提供的用例,@ JigglyNaga的答案可能比这个更好,但是对于一些更复杂的任务,您还可以使用keys以下命令遍历列表项

来自file

for k in $(jq '.children.values | keys | .[]' file); do
    ...
done

或从字符串:

for k in $(jq '.children.values | keys | .[]' <<< "$MYJSONSTRING"); do
    ...
done

因此,例如,您可以使用:

for k in $(jq '.children.values | keys | .[]' file); do
    value=$(jq -r ".children.values[$k]" file);
    name=$(jq -r '.path.name' <<< "$value");
    type=$(jq -r '.type' <<< "$value");
    size=$(jq -r '.size' <<< "$value");
    printf '%s\t%s\t%s\n' "$name" "$type" "$size";
done | column -t -s$'\t'

如果没有用于这些值的换行符,则可以通过jq在循环内进行一次调用来使其变得更快:

for k in $(jq '.children.values | keys | .[]' file); do
    IFS=$'\n' read -r -d '' name type size \
        <<< "$(jq -r ".children.values[$k] | .path.name,.type,.size" file)"
    printf '%s\t%s\t%s\n' "$name" "$type" "$size";
done | column -t -s$'\t'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Shell脚本中循环遍历JSON数组

来自分类Dev

使用for循环在shell脚本中遍历JSON数组

来自分类Dev

Shell 脚本:遍历 json 数组

来自分类Dev

在蝙蝠脚本中循环遍历数组

来自分类Dev

在PLSQL 12.1中循环遍历JSON数组

来自分类Dev

在 JS 中循环遍历 json 数组

来自分类Dev

Shell 脚本 - 循环遍历 csv 文件多列中的值

来自分类Dev

在shell脚本中循环json输出

来自分类Dev

遍历shell脚本中作为函数的参数给出的数组

来自分类Dev

在shell脚本中解析json数组

来自分类Dev

Java循环遍历Json数组?

来自分类Dev

Javascript 循环遍历 JSON 数组

来自分类Dev

循环遍历数组元素,给定 Bash 脚本中的数组变量名数组

来自分类Dev

Shell 脚本:将循环输出存储在单独的数组中

来自分类Dev

如何在胡子模板中循环遍历Json数组

来自分类Dev

在JavaScript中循环遍历json_encoded PHP数组

来自分类Dev

如何在Angular中循环遍历JSON数组

来自分类Dev

如何循环遍历 Json 对象中的多个数组

来自分类Dev

在 Java 中循环遍历 JSON 数组并传输对象

来自分类Dev

遍历JSON中的数组

来自分类Dev

在bash shell脚本中,编写一个遍历字符串值的for循环

来自分类Dev

在shell脚本中循环“ heredoc”

来自分类Dev

Shell脚本中的中断循环

来自分类Dev

在SwiftyJSON中循环遍历JSON

来自分类Dev

在PHP中循环遍历JSON

来自分类Dev

将JSON解析为shell脚本中的数组

来自分类Dev

循环遍历JSON数组不起作用

来自分类Dev

循环遍历JSON数组并打印数据

来自分类Dev

使用空对象循环遍历 Json 数组