簡體   English   中英

Bash 列出所有 json 路徑

[英]Bash to list all json paths

我有一個json文件,我想列出它的所有路徑 例如: appsettings.json 文件:

{
  "foo": "bar",
  "zuzu": {
    "lele": "lala"
  },
  "eita": [
    {
      "oxe": "right"
    }
  ]
}

預期結果是一個包含(作為 bash 變量)的數組:

[
  "foo",
  "zulu",
  "zuzu.lele",
  "eita",
  "eita.0",
  "eita.0.oxe"
]

我已經用jq嘗試了以下操作,但我無法迭代jq結果,而且我一無所知。

#!/bin/bash
join() {
    # $1 is return variable name
    # $2 is sep
    # $3... are the elements to join
    local retname=$1 sep=$2 ret=$3
    shift 3 || shift $(($#))
    printf -v "$retname" "%s" "$ret${@/#/$sep}"
}

jsonPaths=$(cat j.json | jq 'path(..)')

for path in $jsonPaths; do
  join pathString "." "${path[@]}"
  echo $path
done
$ jq '[ path(..) | join(".") ] | del(.[0])' /tmp/2.json
[
  "foo",
  "zuzu",
  "zuzu.lele",
  "eita",
  "eita.0",
  "eita.0.oxe"
]

筆記:

  • cat file | jq cat file | jqcat的無用用法。 jq ... file
  • 要轉換為 bash 數組,請使用通常的readarray -t arr < <(jq -r ....)
  • jq具有相當強大的編程語言。 首先嘗試解決jq問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM