簡體   English   中英

如何在 shell 腳本中的 json 文件中將 jq 數組值組合成相同的鍵?

[英]How to combine jq array value into same key in json file in shell script?

我有一個包含以下內容的 json 文件:

[
  {
    "id": "one",
    "msg": [
      "test"
    ],
    "FilePath": [
      "JsonSerializer.cs",
      "ChatClient.cs",
      "MiniJSON.cs"
    ],
    "line": [
      358,
      1241,
      382
    ]
  },
  {
    "id": "two",
    "msg": [
      "secondtest"
    ],
    "FilePath": [
      "Utilities.cs",
      "PhotonPing.cs"
    ],
    "line": [
      88,
      36
    ]
  }
]

我想要 output ,你可以看到值合並為一個:

one
[
  "test"
]
[
  "JsonSerializer.cs",358
  "ChatClient.cs",1241
  "MiniJSON.cs",382
]

two
[
  "secondtest"
]
[
  "Utilities.cs",88
  "PhotonPing.cs",36
]

我試過這個cat stack.json |jq -r '.[]|.id,.msg,.FilePath,.line'給 output 作為

  one
    [
      "test"
    ]
    [
      "JsonSerializer.cs",
      "ChatClient.cs",
      "MiniJSON.cs"
    ]
    [
      358,
      1241,
      382
    ]
    two
    [
      "secondtest"
    ]
    [
      "Utilities.cs",
      "PhotonPing.cs"
    ]
    [
      88,
      36
    ]

請幫我解決這個問題,我已經嘗試了很多調試但無法通過。 此外,每個文件路徑和行總是相似的。 例如,如果 FilePath 有 3,則 line 也有 3 個值。

您正在尋找transpose

.[] | .id, .msg, ([.FilePath, .line] | transpose | add), ""

在線演示

<stack.json jq -r '.[] | .id, .msg, ([.FilePath, .line]|transpose|add)'

根據您的要求提供 output。

transpose[[1,2,3],[4,5,6]]轉換為[[1,4],[2,5],[3,6]] add所有數組元素收集到一個數組中。

如果您希望在一行中包含文件路徑和行號,我建議將它們格式化為字符串,用冒號分隔:

.[] | .id, .msg, ([.FilePath, .line]|transpose|map(join(":")))

暫無
暫無

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

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