引用一个 json 文件并将其作为 json 散列传递到命令参数的 json 输入中
Reference a json file and pass it as json hash into a json input for a command argument
我有一个名为“input.json”的 json 文件:
{
"item1": "banana",
"item2": false
}
我有一个 bash 命令接受 json 输入,然后将上述文件内容的散列作为“输入”键的值:
executable '{"input": {"item1": "banana", "item2": false}, "option1": "value1", "option2": "value2" }'
如何将 input.json 文件中的 json 内容传递到命令中?我试过:
- 使用
jq -c . input.json
从 input.json 创建单行 json 散列并将散列传递给变量,然后在命令中引用该变量 - 它不起作用(缺少预期值 - 可能是因为单引号弄乱了引用)。
感谢任何帮助或指点。
您可以按照您指示的步骤进行操作,应该可以。创建 base64 内容,将其存储在变量中并将其传递给 jq
#!/usr/bin/env bash
# Bash script to construct a base64 of a JSON content and passing
# it to an another command
# Create the base64
base=$(jq -c . input.json | base64)
# Create the JSON that stores the above hash
json=$(jq -cn --arg b64 "$base" '{"input": $b64, "option1": "value1", "option2": "value2" }')
# If you want the JSON to be a literal string, use the '@text' filter
# with 'jq'
jsonString=$(jq -cn --arg b64 "$base" '{"input": $b64, "option1": "value1", "option2": "value2" } | @text')
# Pass the contents of either 'json' or 'jsonString', depending on
# how your executable parses the command line argument
我有一个名为“input.json”的 json 文件:
{
"item1": "banana",
"item2": false
}
我有一个 bash 命令接受 json 输入,然后将上述文件内容的散列作为“输入”键的值:
executable '{"input": {"item1": "banana", "item2": false}, "option1": "value1", "option2": "value2" }'
如何将 input.json 文件中的 json 内容传递到命令中?我试过:
- 使用
jq -c . input.json
从 input.json 创建单行 json 散列并将散列传递给变量,然后在命令中引用该变量 - 它不起作用(缺少预期值 - 可能是因为单引号弄乱了引用)。
感谢任何帮助或指点。
您可以按照您指示的步骤进行操作,应该可以。创建 base64 内容,将其存储在变量中并将其传递给 jq
#!/usr/bin/env bash
# Bash script to construct a base64 of a JSON content and passing
# it to an another command
# Create the base64
base=$(jq -c . input.json | base64)
# Create the JSON that stores the above hash
json=$(jq -cn --arg b64 "$base" '{"input": $b64, "option1": "value1", "option2": "value2" }')
# If you want the JSON to be a literal string, use the '@text' filter
# with 'jq'
jsonString=$(jq -cn --arg b64 "$base" '{"input": $b64, "option1": "value1", "option2": "value2" } | @text')
# Pass the contents of either 'json' or 'jsonString', depending on
# how your executable parses the command line argument