簡體   English   中英

Json 使用 JQ 提取帶有索引的數組屬性

[英]Json extract Array property with index using JQ

我得到了一個 Json,它基本上是一個數組,但格式很奇怪,我無法更改。 有什么方法可以通過搜索名稱來獲得 JQ url,就像這樣?

{
    "servers": {
        "servers[0].name": "abc",
        "servers[0].url": "www.abc.test.com",
        "servers[1].name": "xyz",
        "servers[1].url": "www.xyz.test.com"
    }
}
jq -r  '.servers | select(.name=="abc") | .url'

 

假設“=”可以天真地更改為“:”:

sed 's/ = /: /' | jq '
  .servers
  | keys_unsorted[] as $k
  | select(.[$k] == "abc")
  | ($k | sub("[.]name"; ".url")) as $k
  | .[$k]
'

如果您正在尋找從此類來源構建 JSON 數組或 object 的通用方法,這是一種使用reducesetpath以及正則表達式來拆分鍵的方法:

def build:
  reduce (to_entries[] | .key |= [
    splits("(?=\\[\\d+\\])|\\.")
    | capture("\\[(?<index>\\d+)\\]|(?<field>.+)")
    | (.index | tonumber)? // .field
  ]) as {$key, $value} (null; setpath($key; $value));

.servers | build.servers[] | select(.name == "abc").url

演示

暫無
暫無

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

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