次のように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
匿名配列を作成します。