하위 오브젝트의 모두에 대한 jq 인쇄 키 및 값


13

객체의 모든 키를 인쇄하는 솔루션 으로이 Q / A 를 찾았습니다 .

jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"' 

필자의 경우 위의 하위 객체를 수행하고 싶습니다.

jq -r '.connections keys[] as $k | "\($k), \(.[$k] | .ip)"'

이를위한 올바른 구문은 무엇입니까?

답변:


21

단순히 파이프를 keys작동시킵니다 :

샘플 input.json:

{
    "connections": {
        "host1": { "ip": "10.1.2.3" },
        "host2": { "ip": "10.1.2.2" },
        "host3": { "ip": "10.1.18.1" }
    }
}

jq -r '.connections | keys[] as $k | "\($k), \(.[$k] | .ip)"' input.json

출력 :

host1, 10.1.2.3
host2, 10.1.2.2
host3, 10.1.18.1

7
keys키를 정렬하므로 keys_unsorted그렇지 않은 것을 지적 할 가치가 있습니다.
피크

1
@peak, OP는 " stackoverflow.com/questions/34226370/… ...을 찾았습니다 . 여기에 허용 된 답변에" keys키 이름이 정렬 된 순서대로 생성됩니다. 원래 순서대로 원하는 경우keys_unsorted "를 사용하십시오 . 그래서 OP는 그것을 알고 keys의식적으로 선택했습니다 .
RomanPerekhrest

3
이 의견은이 Q & A를 통해 다른 사람들을위한 것입니다.
피크

0

vars를 내보내는보다 일반적인 bash 함수 (보간 포함) :

#
#------------------------------------------------------------------------------
# usage example:
# doExportJsonSectionVars cnf/env/dev.env.json '.env.virtual.docker.spark_base'
#------------------------------------------------------------------------------
doExportJsonSectionVars(){

   json_file="$1"
   shift 1;
   test -f "$json_file" || echo "the json_file: $json_file does not exist !!! Nothing to do" && exit 1

   section="$1"
   test -z "$section" && echo "the section in doExportJsonSectionVars is empty !!! nothing to do !!!" && exit 1
   shift 1;

   while read -r l ; do
      eval $l ;
   done < <(cat "$json_file"| jq -r "$section"'|keys_unsorted[] as $key|"export \($key)=\(.[$key])"')
}

예제 데이터

cat cnf/env/dev.env.json
{
  "env": {
    "ENV_TYPE": "dev",
      "physical": {
        "var_name": "var_value"
      },
      "virtual": {
          "docker": {
            "spark_base": {
                "SPARK_HOME": "/opt/spark"
              , "SPARK_CONF": "$SPARK_HOME/conf"
            }
            , "spark_master": {
              "var_name": "var_value"
            }
            , "spark_worker": {
              "var_name": "var_value"
            }
          }
          , "var_name": "var_value"
      }
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.