jq가 포함된 JSON, 모든 값을 *로 변경

jq가 포함된 JSON, 모든 값을 *로 변경

JSON 파일의 모든 값을 *로 바꾼 다음 출력을 새 JSON 파일로 반환해야 합니다.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "Global": {
    "Version": "1.0.0",
    "Environment": {
      "Long": "Local",
      "Short": "loc"
    },
    "ActiveDirectory": {
      "Role": {
        "User": "user",
        "Manager": "manager",
        "Admin": "admin"
      }
    },
    "Jwt": {
      "Authority": "http://localost:8089/auth/reals/master",
      "Audience": "pneumanet-client",
      "AuthorizationUrl": "http://localost:8089/auth/reals/master/protocol/openid-connect/auth",
      "TokenUrl": "http://localost:8089/auth/reals/master/protocol/openid-connect/token",
      "Real": "master"
    }
  }
}

"Default": "Information"과 같은 값을 가진 모든 키를 볼 수 있듯이 "Information"을 *로 변경하고 싶습니다. 이는 모든 키 값 필드에 적용되어야 합니다. 내가 알아낼 수 없기 때문에 이것이 jq로 가능합니까? 감사해요.

답변1

..한 가지 가능한 접근 방식은 재귀 하강( ) 을 사용 하고 값이 있는 노드를 선택 "Information"하고 업데이트하는 것입니다.

$ jq '(.. | select(. == "Information")) |= "*"' file.json
{
  "Logging": {
    "LogLevel": {
      "Default": "*",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "*"
    }
  },
  "Global": {
    "Version": "1.0.0",
    "Environment": {
      "Long": "Local",
      "Short": "loc"
    },
    "ActiveDirectory": {
      "Role": {
        "User": "user",
        "Manager": "manager",
        "Admin": "admin"
      }
    },
    "Jwt": {
      "Authority": "http://localost:8089/auth/reals/master",
      "Audience": "pneumanet-client",
      "AuthorizationUrl": "http://localost:8089/auth/reals/master/protocol/openid-connect/auth",
      "TokenUrl": "http://localost:8089/auth/reals/master/protocol/openid-connect/token",
      "Real": "master"
    }
  }
}

관련 정보