[英]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 中的元素並訪問:
目前我有:
{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.