programing

문자열 변수를 파일이 아닌 jq로 전달해도 될까요?

topblog 2023. 3. 4. 14:07
반응형

문자열 변수를 파일이 아닌 jq로 전달해도 될까요?

JSON 문자열을 bash의 배열로 변환합니다.JSON 문자열은 인수로서 bash 스크립트에 전달됩니다(파일에 존재하지 않습니다).

임시 파일을 사용하지 않고 그것을 실현할 수 있는 방법이 있습니까?

이와 마찬가지로 다음과 같습니다.

script.sh

#! /bin/bash
json_data='{"key":"value"}'
jq '.key' $json_data

jq: error: Could not open file {key:value}: No such file or directory

여기서 bash 문자열을 사용하는 것이 좋습니다.

jq '.key' <<< "$json_data"

원래 질문에서 주어진 변수 "json_data"의 값이 유효하지 않기 때문에 이 응답은 여전히 두 가지 경우(거의 유효한 JSON)를 모두 포함합니다.

유효한 JSON

"$json_data"가 유효한 JSON 값을 보유하고 있는 경우 이 페이지에서 언급하지 않은 두 가지 대안을 제시합니다.

--argjson

예를 들어 다음과 같습니다.

 jq -n --argjson data "$json_data" '$data.key'

env

셸 변수가 환경변수가 아닌 경우:

json_data="$json_data" jq -n 'env.json_data | fromjson.key'

거의 유효한 JSON

$json_data가 JSON으로 유효하지 않지만 jq 식으로는 유효한 경우 다음 텍스트에서 설명하는 방법을 사용할 수 있습니다.

$ json_data='{key:"value"}'
$ jq -n "$json_data" | jq .key
"value"

bash 사용:echo "$json_data" | jq '.key'

그렇고 말고요.배쉬에게 대신 파일을 주라고

jq '.key' <(echo "$json_data")

그리고 반드시 bash로 실행해. sh가 아니라.

인라인 명령을 사용하려면 Mac에서 다음 작업을 찾았습니다.

echo '{"key":"value"}' | jq .key
#! /bin/bash
json_data='{"key":"value"}'
echo $json_data | jq --raw-output '.key'

이 작업을 수행하려는 경우.sh파일, 이게 나한테 효과가 있었어:

local json_data $(getJiraIssue "$1")               # store JSON in var
echo `jq -n "$json_data" | jq '.fields.summary'`   # pass that JSON var to jq

그냥 해

$ jq '.key' <<< $'{"key":"value"}'
"value"

언급URL : https://stackoverflow.com/questions/47105490/can-i-pass-a-string-variable-to-jq-not-the-file

반응형