簡體   English   中英

如何用 jq 過濾和替換 json 中的值

[英]How to filter and replace values in json with jq

我在使用 jq 過濾和更新 json 文件的內容時遇到問題。 我需要根據特定值過濾 json 數據,並基於該過濾器編輯其他值並增加其他值

我試過用

jq '.[] | select (."name"| contains("CHANNEL1"))' 

過濾但結果缺少頂部鍵“x-ID.0”信息,結果如下:

{
  "_file.name": "filename.ext",
  "name": "CHANNEL1 HD TV",
  "logo": "file.png",
  "x-channelID": "726"
}
{
  "_file.m3u.name": "filename.ext",
  "name": "CHANNEL1 SD",
  "logo": "file.png",
  "x-channelID": "726"
}

為了重新編號,我已經測試了下面的 function 並且效果很好

jq -n -s '[ foreach inputs[] as $i (100; .+1; $i*{"x-channelID":(.-1)}) ]'

這是原始的 json 文件

{
  "x-ID.0": {
    "_file.name": "filename.ext",
    "name": "CHANNEL1 HD TV",
    "logo": "file.png",
    "x-channelID": "726"
  },
   "x-ID.2": {
    "_file.m3u.name": "filename.ext",
    "name": "CHANNEL2",
    "logo": "file.png",
    "x-channelID": "106"
  },
   "x-ID.3": {
    "_file.m3u.name": "filename.ext",
    "name": "CHANNEL3 SD",
    "logo": "file.png",
    "x-channelID": "236"
  },
   "x-ID.4": {
    "_file.m3u.name": "filename.ext",
    "name": "CHANNEL1 SD",
    "logo": "file.png",
    "x-channelID": "726"
  },
   "x-ID.5": {
    "_file.m3u.name": "filename.ext",
    "name": "CHANNEL2 HD",
    "logo": "file.png",
    "x-channelID": "726"
  }
}

這是預期的結果

{
  "x-ID.0": {
    "_file.m3u.name": "filename.ext",
    "name": "CHANNEL1 HD",
    "logo": "CHANNEL1.png",
    "x-channelID": "100"
  },
   "x-ID.4": {
    "_file.m3u.name": "filename.ext",
    "name": "CHANNEL1 SD",
    "logo": "CHANNEL1.png",
    "x-channelID": "101"
  }
}

謝謝你的幫助 !

您可以使用以下內容:

to_entries | map(select(.value.name|strings|contains("CHANNEL1"))) | [foreach .[] as $keyvalue (99; .+1; { key: $keyvalue.key, value: ($keyvalue.value + {"x-channelID": .})})] | from_entries

to_entries map 將您的 object 放入{ key: "key", value: "value" }項的數組中。

map(select(filter))過濾那些值符合您的條件的人。

然后,我們使用foreach來增加一個計數器,同時迭代剩余的鍵/值對,並用計數器更新值的 x-channelID 字段。

最后,我們使用from_entries從鍵/值對數組中重新創建所需的 object。

你可以在這里試試

暫無
暫無

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

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