jqを使用して配列にオブジェクト文字列を追加すると、エスケープ文字は変換されません。

jqを使用して配列にオブジェクト文字列を追加すると、エスケープ文字は変換されません。

jqを使用して親オブジェクト[...]にオブジェクト{...}を追加しようとしています。

しかし、次の

parent="[]"


block=$(cat << EOF
{
    "block_id": "$block_id",
    "block_parent_id": "$block_parent_id",
    "current_index": 0,
    "child_sum": 0,
    "block_cidr": "",
    "block_size": "",
    "child_cidr": "",
    "child_size": "",
    "subnets": []
}
EOF
)

jq --arg ITEM "$block" '.+[$ITEM]' <<< "$parent"

与えられた

[
  "{\n\t\"block_id\": \"\",\n\t\"block_parent_id\": \"\",\n\t\"current_index\": 0,\n\t\"child_sum\": 0,\n\t\"block_cidr\": \"\",\n\t\"block_size\": \"\",\n\t\"child_cidr\": \"\",\n\t\"child_size\": \"\",\n\t\"subnets\": []\n}"
]

ご覧のとおり、\ nや\ tなどのエスケープ文字は文字通りエンコードされています。 parent[]にエントリを追加してエスケープ文字(\ n ->新しい行など)を正しく翻訳するにはどうすればよいですか?

引用するhttps://replit.com/@LoganLee7/jq-add-item-encodes-nt#main.sh

ベストアンサー1

私は答えを見つけました:

jq --arg ITEM "$block" '.+[$ITEM|fromjson]' <<< "$parent"

または

jq --argjson ITEM "$block" '.+[$ITEM]' <<< "$parent"

おすすめ記事