json
  • regex
  • bash
  • jq
  • 2015-07-15 14 views 13 likes 
    13

    Ho questo JSON e voglio ottenere l'id della subnet corrispondente che si adatta alla subnet variabile.ricerca tipo regex in un json con jq

    subnet="192.168.112" 
    json='{ 
        "subnets": [ 
        { 
         "cidr": "192.168.112.0/24", 
         "id": "123" 
        }, 
        { 
         "cidr": "10.120.47.0/24", 
         "id": "456" 
        } 
        ] 
    }' 
    

    Poiché regex non è supportato con jq. L'unico modo che ho trovato per ottenere il giusto id è a mixte grep, sed e JQ come questo:

    tabNum=$((`echo ${json} | jq ".subnets[].cidr" | grep -n "$subnet" | sed "s/^\([0-9]\+\):.*$/\1/"` - 1)) 
    NET_ID=`echo ${json} | jq -r ".subnets[${tabNum}].id"` 
    

    C'è un modo per ottenere l'id solo con JQ?

    +1

    Le espressioni regolari sono supportate in jq 1.5. Potresti usare quello. –

    risposta

    21

    Non mi è del tutto chiaro quale sia lo script fornito, ma sembra che cerchi solo una stringa che contenga il sottoinsieme fornito. Suggerirei di utilizzare contains o startswith. Uno script di esempio sarà simile:

    echo "${json}" | jq --arg subnet "$subnet" '.subnets[] | select(.cidr | startswith($subnet)).id' 
    

    Dal momento che si parla regex: l'ultima release di JQ, 1.5, include il supporto regex e, se avete a che fare con lo spago (grazie a Jeff Mercado per la precisazione!) problemi di manipolazione frequentemente, consiglierei di verificarlo.

    Problemi correlati