簡體   English   中英

在JQ中用$path遞歸替換值

[英]Recursively replace value with $path in JQ

假設我有一個復雜的 JsonObject

{
  "parent": {
    "name": "value",
    "child": {
      "child_value1": "value",
      "child_value2": "value",
      "child_value3": ["value1","value2"],
      "child_value4": {
         "child_child_value1":"value"
      }
    }
  }
}

我想用 $ 前綴的鍵名替換每個鍵的值

{
  "parent": {
    "name": "$name",
    "child": {
      "child_value1": "$child_child_value1",
      "child_value2": "$child_child_value2",
      "child_value3": ["$child_child_value3_0","$child_child_value3_1"],
      "child_value4": {
         "child_child_value1":"$child_child_value4_child_child_value1"
      }
    }
  }
}

有沒有辦法遞歸地做到這一點?

編輯

這是我正在使用的當前配置文件

{
  "apis": {
    "order": {
      "base_url": "$mapping_base_url"
    },
    "payment": {
      "base_url": "$admin_base_url"
    }
  },
  "features": {
    "authentication": {
      "authProviders": true,
      "registration": false
    }
  },
  "availableLocales":["en","es"]
}

這是使用推薦的 jq 表達式的結果:

. |= reduce paths(strings) as $p (.; setpath($p; "$" + ($p | join("_"))))

{
  "apis": {
    "order": {
      "base_url": "$apis_order_base_url"
    },
    "payment": {
      "base_url": "$apis_payment_base_url"
    }
  },
  "features": {
    "authentication": {
      "authProviders": true,
      "registration": false
    }
  },
  "availableLocales": [
    "$availableLocales_0",
    "$availableLocales_1"
  ]
}

您正在尋找這樣的東西:

.parent |=
  reduce paths(strings) as $p (.;
    setpath($p; "$" + ($p | join("_")))
  )

在線演示

暫無
暫無

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

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