I solved this issue on Windows by setting each key in the JSON file as a separate environment variable.
I was facing an issue with the private_key because it has a humongous value.
Here is the Windows Powershell Command that did the job for me:
flyctl secrets set private_key="$((Get-Content secrets.json | ConvertFrom-Json).private_key)" --json
Here is the bash equivalent of this(Not verified):
flyctl secrets set private_key="$(jq -r '.private_key' secrets.json)" --json
These commands basically extract private_key from the secrets.json file in my root directory.
The resulting value is passed as a parameter to the flyctl secrets set command.
I haven’t tested this out personally, but you could encode the secret in base64 before setting it. Then in your application, decode it back into the JSON string.