Powershell -以变量作为参数的JSON字符串



我试图在PowerShell中使用Databricks CLI。我需要传递JSON字符串作为参数。

我有两个变量——job_id等于10,parameterValue等于some string

我使用了4种不同的组合,但仍然得到Error: JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)的错误

代码:

databricks jobs run-now --job-id $job_id --notebook-params "{""parameterName"":""$parameterValue""}"
databricks jobs run-now --job-id $job_id --notebook-params "{`"parameterName`":`"$parameterValue`"}"
databricks jobs run-now --job-id $job_id --notebook-params '{"parameterName":"$parameterValue"}'

尝试构建自己的序列化字符串是一种不好的做法,而是使用预期的方法和cmdlet(如ConvertTo-Json):

$job_id = 10
$parameterName = 'Some String'
$Data = @{
job_id = $job_id
parameterName = $parameterName
}
$Json = ConvertTo-Json $Data
databricks jobs run-now --job-id $job_id --notebook-params $Json

或压缩:

databricks jobs run-now --job-id $job_id --notebook-params (ConvertTo-Json -Compress @{ parameterName = $parameterName })

我所做的是

  1. 编写python代码打印传递的参数
if __name__ == '__main__':
import sys
print(sys.argv[1])

2。用不同的设置测试了这一点,例如:输入:$s="{`"parameterName`":`"$parameterValue`"}"

powershell输出:{"tableName":"some_string"}

python输出:{parameterName:some_string} 所以python完全忽略了双引号,即使它们被转义了。

I had to:

  1. Escape () the Escape (') character:

powershell输入:$s="{`"parameterName`":`"$parameterValue`"}"

powershell输出:{"parameterName":"some_string"}

python输出:{"parameterName":"some_string"}



唯一的问题我还没有弄清楚是当$parameterValue变量包括空间,那么它不工作:

powershell输入:

$parameterValue='some string'
$s="{`"parameterName`":`"$parameterValue`"}"

powershell输出:{"parameterName":"some string"}

python输出:{"parameterName":"some

最新更新