khóa in jq và giá trị cho tất cả trong đối tượng phụ


12

Tôi tìm thấy Q / A này với giải pháp in tất cả các phím trong một đối tượng:

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

Trong trường hợp của tôi, tôi muốn thực hiện như trên nhưng trên một đối tượng phụ:

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

Cú pháp thích hợp để làm điều này là gì?

Câu trả lời:


21

Đơn giản chỉ cần ống để keyshoạt động:

Mẫu 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

Đầu ra:

host1, 10.1.2.3
host2, 10.1.2.2
host3, 10.1.18.1

7
keyssắp xếp các phím, vì vậy nó là giá trị chỉ ra rằng keys_unsortedkhông.
— cao điểm

1
@peak, OP đã viết " Tôi tìm thấy stackoverflow.com/questions/34226370/ nam ... " trong đó câu trả lời được chấp nhận rõ ràng " keystạo ra các tên khóa theo thứ tự được sắp xếp; nếu bạn muốn chúng theo thứ tự ban đầu, hãy sử dụngkeys_unsorted ". Vì vậy, OP nhận thức được điều đó và đã chọn một keyscách có ý thức.
— RomanPerekhrest

3
Nhận xét này có ý nghĩa cho những người khác đi qua Hỏi & Đáp này.
— cao điểm

0

Hàm bash chung hơn để xuất vars (có nội suy):

#
#------------------------------------------------------------------------------
# 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])"')
}

dữ liệu mẫu

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"
      }
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.