ข้ามการพิมพ์เป็นสนามตอนที่มันว่างเปล่าในผลลัพธ์จาก LANGUAGE

0

คำถาม

ฉันต้อง language:

    "spec": {
        "background": true,
        "failurePolicy": "Fail",
        "rules": [
            {
                "exclude": {
                    "resources": {}
                },
                "generate": {
                    "clone": {}
                },
                "match": {
                    "resources": {
                        "kinds": [
                            "networking.k8s.io/v1/NetworkPolicy"
                        ]
                    }
                },
                "mutate": {},
                "name": "validate-nodeport",
                "validate": {
                    "message": "Services of type NodePort are not allowed.",
                    "pattern": {
                        "spec": {
                            "type": "!NodePort"
                        }
                    }
                }
            }
        ],
        "validationFailureAction": "audit"
    },
    "status": {
        "ready": true
    }
}

ฉันต้อง jq คำสั่ง:

(.spec.rules[0].match.resources.kinds[] / "/")
| [select(.[1])[0] // null, select(.[2])[1] // null, last]
  as [$version,$group,$kind]
| {$version,$group,$kind}

แต่บางครั้งสนาม"เวอร์ชั่น"หรือ"กลุ่ม"อาจจะว่างเปล่า ฉันต้องการจะเขียนกับคนทำตามเงื่อนไข-หาข้อความเป็นโพรโทคอล aimcomment แล้วมันคือไม่จำเป็นต้องเขียนมัน

jq
2021-11-22 08:03:41
3

คำตอบที่ดีที่สุด

2

ตัวกรองที่คุณมีอยู่แล้วค่อนข้างมีประสิทธิภาพเพียงพอ smooth scrolling ทางที่จะจัดการกับเตรียมตัวเดินแถวต่อของวัตถุตอนที่ทุกเป็นปัจเจกบุคคลช่องข้อมูล(เวอร์ชั่นกลุ่มและแบบไหน)เป็นของขวัญและไม่ต้องการที่จะเปนคนเขียนเรื่องทั้งหมดต้องจัดการกับคนเฉพาะกรณีนี้

ต้องข้ามเรื่องช่องข้อมูลโพรโทคอล aimcomment แค่ท่อของคุณก่อนหน้าตัวกรองที่ด้านล่างนี้

with_entries(select(.value!=null))

i.e. ทั้งตัวกรองการทางด้านล่างนี้ เห็น jqplay สาธิต

(.spec.rules[0].match.resources.kinds[] / "/")
| [select(.[1])[0] // null, select(.[2])[1] // null, last]
  as [$version,$group,$kind]
| {$version,$group,$kind} 
| with_entries(select(.value!=null))
2021-11-22 08:17:44
0

ใช้ select ตัวกรอง:

jq '(.spec.rules[0].match.resources.kinds[] / "/")
        | [select(.[1])[0] // null, select(.[2])[1] // null, last]
            as [$version,$group,$kind]
    | {$version,$group,$kind}
    | select(.version != "")
    | select(.group != "")
    ' \
    spec.json

หรือถ้าคุณต้องการเพื่อนแค่ลดเสียงออก:

jq '(.spec.rules[0].match.resources.kinds[] / "/")
        | [select(.[1])[0] // null, select(.[2])[1] // null, last]
            as [$version,$group,$kind]
    | {$version,$group,$kind}
    | if .version != "" then
        if .group != "" then
            {$version,$group,$kind}
        else
            {$version,$kind}
        end
      else
        if .group != "" then
            {$group,$kind}
        else
            {$kind}
        end
      end
    ' \
    spec.json
2021-11-22 08:41:21
0

คน {$version,$group,$kind} ส่วนหนึ่งจาก อื่นๆของฉันตอบ ถูกรวมเพื่อให้แสดงวิธีที่จะทำให้ใช้ของตัวแปรตามที่คุณได้ร้องขอมาต้องถูกสร้างขึ้น ดังนั้นถ้าคุณไม่ต้องการให้มันถูกเขียนอย่าสร้างมันในตอนแรกเพียงเพื่อแก้ไขมันกันทีหลัง with_entries(select(.value)) หรือคนยังไง แทนที่จะสร้างมันต่างออกจากที่ของคุณต้องการ

สำหรับตัวอย่างแทนที่จะเป็นแบบไม่มีเงื่อนไขโดยใช้ทั้งสามชิ้นส่วนเหมือนใน {$version,$group,$kind} คุณอาจจะเลือกแค่เพียงคนเดียวที่ไม่ได้ใช้โพรโทคอล aimcomment [{$version},{$group},{$kind} | select(.[])] | add:(สาธิต)

(.spec.rules[0].match.resources.kinds / "/")
| [select(.[1])[0] // null, select(.[2])[1] // null, last]
  as [$version,$group,$kind]
| [{$version},{$group},{$kind} | select(.[])] | add

ดีขึ้นรึยัง,การแก้ไข [...] as {...} ส่วนหนึ่งโดยตรงสร้างสิ่งที่คุณต้องการสำหรับตัวอย่าง:(สาธิต)

(.spec.rules[0].match.resources.kinds[] / "/")
| ({version:select(.[1])[0]} // {})
  + ({group:select(.[2])[1]} // {})
  + {kind: last}
2021-11-22 09:03:47

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................