簡體   English   中英

JQ:將數組轉換為數組,訪問上層元素和 position

[英]JQ: Convert Array to Array, access upper elements and position

我得到以下來源:

{
    "id": "FOO11100",
    "Published": {
        "$date": "2020-04-02T15:15:00Z"
    },
    "Modified": {
        "$date": "2020-12-24T16:15:00Z"
    },
    "last-modified": {
        "$date": "2020-12-24T16:15:00Z"
    },
    "access": {
        "authentication": "SINGLE",
        "complexity": "LOW",
        "vector": "NETWORK"
    },
    "available_product": [
        "custom:foo:a:roxy:1.8",
        "custom:foo:a:roxy:1.9",
        "custom:foo:o:ianu:10.0"
    ]
}

我想得到這樣的東西:

{
  "entries": [
  {
    "parent": {
      "processid": "FOO11100",
      "published": "2020-04-02T15:15:00Z",
      "modified": "2020-12-24T16:15:00Z",
      "access_authentication": "SINGLE",
      "access_complexity": "LOW",
      "access_vector": "NETWORK"
    },
    "childs": [
        {
          "processid": "FOO11100",
          "childid": 1,
          "type": "Application",
          "name": "roxy",
          "score": "1.8",
          "lastupdate": "2020-12-24T16:15:00Z"
        },
        {
          "processid": "FOO11100",
          "childid": 2,
          "type": "Application",
          "name": "roxy",
          "score": "1.9",
          "lastupdate": "2020-12-24T16:15:00Z"
        },
        {
          "processid": "FOO11100",
          "childid": 3,
          "type": "Operation",
          "name": "ianu",
          "score": "10.0",
          "lastupdate": "2020-12-24T16:15:00Z"
        }
      ]
    }
  ]
}

上半部分沒問題,但下半部分我想遍歷.available_product 中的元素並訪問:

  • id 和 last-modified 在新 object 中的 processid 和 lastupdate 數組之外
  • childid 數組中元素的 position
  • 標記化文本第 3 部分以翻譯它(a=Application,o=Operation)

目前我有:

{entries: 
 [
  { parent: 
   {
    processid: .id, 
    published: .Published."$date", 
    modified: ."last-modified"."$date", 
    access_authentication: .access.authentication, 
    access_complexity: .access.complexity, 
    access_vector: .access.vector
   }, 
   childs: .available_product
  }
 ]
}

但我對數組處理沒有任何運氣。

任何幫助表示贊賞

以下適用於您的給定輸入:

. as { id: $processid, "last-modified": { "$date": $lastupdate } }
| { a:"Application", o:"Operation" } as $types
| {
    entries: [
        {
            parent: {
                $processid, 
                published: .Published."$date", 
                modified: $lastupdate,
                access_authentication: .access.authentication, 
                access_complexity: .access.complexity, 
                access_vector: .access.vector
            },
            children: .available_product
                | map(
                    split(":") as [$prefix, $name, $typeid, $name, $score]
                    | $types[$typeid] as $type
                    | { $processid, $type, $name, $score, $lastupdate }
                )
                | to_entries
                | map({childid: (.key+1)} + .value)
        }
    ]
}

生成 output:

{
  "entries": [
    {
      "parent": {
        "processid": "FOO11100",
        "published": "2020-04-02T15:15:00Z",
        "modified": "2020-12-24T16:15:00Z",
        "access_authentication": "SINGLE",
        "access_complexity": "LOW",
        "access_vector": "NETWORK"
      },
      "children": [
        {
          "childid": 1,
          "processid": "FOO11100",
          "type": "Application",
          "name": "roxy",
          "score": "1.8",
          "lastupdate": "2020-12-24T16:15:00Z"
        },
        {
          "childid": 2,
          "processid": "FOO11100",
          "type": "Application",
          "name": "roxy",
          "score": "1.9",
          "lastupdate": "2020-12-24T16:15:00Z"
        },
        {
          "childid": 3,
          "processid": "FOO11100",
          "type": "Operation",
          "name": "ianu",
          "score": "10.0",
          "lastupdate": "2020-12-24T16:15:00Z"
        }
      ]
    }
  ]
}

生成相同 output 的替代版本可能是:

.id as $processid
| ."last-modified"."$date" as $lastupdate
| {
    entries: [
        {
            parent: {
                $processid, 
                published: .Published."$date", 
                modified: $lastupdate,
                access_authentication: .access.authentication, 
                access_complexity: .access.complexity, 
                access_vector: .access.vector
            },
            children: .available_product
                | to_entries
                | map(
                    .value |= split(":")
                    | {
                        $processid,
                        childid: (.key+1),
                        type: { a:"Application", o:"Operation" }[.value[2]],
                        name: .value[3],
                        score: .value[4],
                        $lastupdate
                    }
                )
        }
    ]
}

暫無
暫無

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

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