다음과 같이 jq에서 json 파일을 생성하고 싶습니다.
{
"cpe": "dabb8fbd-d7be-4175-abb4-c628bb8cf1b5",
"ps": [ "Obev" ],
"ets": 5,
"pMap": {
"aik": ["1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-1", "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-2", "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-3", "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-4", "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-5"]
}
이것이 내가 jq에서 시도한 것입니다 -
inner2=$(jq -n --arg aik "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-1", "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-2", "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-3", "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-4", "1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-5" \
'$ARGS.named')
res=$(jq -n --arg cpe "App" \
--arg ps "["Obev"]" \
--arg ets 5 \
--argjson pMap "$inner2" \
'$ARGS.named')
그러나 예상대로 JSON 형식을 반환하지 않습니다.
ets
값이 5
int인 경우 따옴표가 필요하지 않지만
pMap
아래와 같이 값이 생성됩니다."aik": {"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-1, 1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-2, 1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-3, 1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-4, 1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-5"}
필요한 작업에 따라 여기에서는 형식이 생성되지 않습니다.
ps
필요한 작업에 따라 값도 생성되지 않습니다.
어떤 도움이라도 좋을 것입니다.
답변1
사용 jo
(참조여기)을 사용하면 명령줄에서 JSON을 생성하는 것보다 명령줄에서 JSON을 생성하는 것이 더 쉽습니다 jq
. 을 사용하여 배열을 만들 수 있습니다 jo -a
.
jo -p \
cpe='dabb8fbd-d7be-4175-abb4-c628bb8cf1b5' \
ps="$( jo -a Obev )" \
ets=5 \
pmap="$( jo aik="$( jo -a \
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-1" \
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-2" \
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-3" \
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-4" \
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-5" )" )"
배열이 있는 쉘을 사용한다고 가정하면 ets
배열의 길이는 다음과 같습니다 aik
.
data=(
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-1"
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-2"
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-3"
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-4"
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-5"
)
jo -p \
cpe='dabb8fbd-d7be-4175-abb4-c628bb8cf1b5' \
ps="$( jo -a Obev )" \
ets="${#data[@]}" \
pmap="$( jo aik="$( jo -a "${data[@]}" )" )"
-p
make sat Pretty 옵션은 jo
출력을 인쇄하므로 문서가 올바르게 구성되었다고 만족스러우면 제거하십시오.
jq
배열이 존재한다고 가정하면 해당 명령 data
은 다음과 같습니다.
jq -n \
--arg cpe 'dabb8fbd-d7be-4175-abb4-c628bb8cf1b5' \
--argjson ps "$( jq -n '$ARGS.positional' --args Obev )" \
--arg ets "${#data[@]}" \
--argjson pmap "$(
jq -n --argjson aik "$( jq -n '$ARGS.positional' --args "${data[@]}" )" \
'$ARGS.named'
)" \
'$ARGS.named'
즉,
jq -n '$ARGS.positional' --args some arguments here
익명 배열을 만듭니다.
답변2
jq 매뉴얼을 읽는 데 더 많은 시간을 할애해야 합니다.https://stedolan.github.io/jq/manual/
values=(
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-1"
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-2"
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-3"
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-4"
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-5"
)
inner=$(jq -n --args '{aik: $ARGS.positional}' "${values[@]}")
echo "$inner"
{
"aik": [
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-1",
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-2",
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-3",
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-4",
"1~4-b7-4c-bb-b~od1.y.1..aiq~s-an-6~-a-5"
]
}