2017-12-22 11 views
0

-arg와 함께 문자열 결합을 사용하는 jq 구문 분석기가 적절한 json 출력을 제공하지 않습니다. 입력 파일 'test.json'이고 출력 파일 'final.json'arg 필터를 사용하여 jq 구문 분석을 수행하면 예상 결과가 제공되지 않습니다.

이 입력 JSON 파일 test.json --------- { 하다 "ParameterKey1"인 "" "Parameterkey2": "" }

Tried test.json with 2nd filter 
    jq --arg inp4 "$keypassword" \ 
        'if .ParameterKey1 == "<value1>" 
          then . + {"ParameterKey1" : ($input1) } 
        else . end'  | jq --arg inp5 "$value2" \ 
        'if .Parameterkey2 == "<value2>" 
          then . + {"value2" : ($input2) } 
        else . end' test.json > final.json 


    Tried test.json with 1st filter 
    jq --arg inp4 "$key" \ 
        'if .ParameterKey1 == "<value1>" 
          then . + {"ParameterKey1" : ($input1) } 
        else . end' test.json | jq --arg inp5 "$value2" \ 
        'if .Parameterkey2 == "<value2>" 
          then . + {"value2" : ($input2) } 
        else . end'  > final.json 


    Tried test.json in both filters 
    jq --arg inp4 "$key" \ 
        'if .ParameterKey1 == "<value1>" 
          then . + {"ParameterKey1" : ($inp4) } 
        else . end' test.json | jq --arg inp5 "$value2" \ 
        'if .Parameterkey2 == "<value2>" 
          then . + {"value2" : ($inp5) } 
        else . end' test.json > final.json 

    Expected output: (final.json) 
     { 
      "ParameterKey1": "value", 
      "Parameterkey2": "value" 
     } 

답변

0

난 당신이 효과적으로 사용 할 수 있습니다 전에 JQ에 대해 조금 배울 필요가 될 것 같아요. 모든 것을 하나로 모으기 전에 비트 단위로 마스터 링하는 것이 좋습니다.

--arg inp4 "$keypassword"부터 시작하겠습니다. 이렇게하면 쉘 변수가 jq 달러 변수로 전달되어 jq 변수 $ inp4를 쉘 변수 $ keypassword의 문자열 값으로 설정합니다. 그런 다음 $inp4을 다른 변수와 마찬가지로 jq 변수로 사용할 수 있습니다. 따라서 따옴표가 없습니다.

사용 방법을 알고있는 또 다른 유용한 점은 -f 명령 줄 옵션입니다. 그렇게하면 많은 시간과 악화를 막을 수 있습니다.

그런데 마침내 모든 것을 조합하면 jq를 한 번만 호출하면됩니다.

+0

-f 명령 줄 옵션을 사용하여 jq를 한 번 호출 할 수있는 코드를 제공 할 수 있습니까? – spiderman

+0

-f 명령 줄 옵션을 사용하더라도 악화가 필요하다고 생각합니다. – spiderman