我试图在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 })
我所做的是
- 编写python代码打印传递的参数
if __name__ == '__main__':
import sys
print(sys.argv[1])
2。用不同的设置测试了这一点,例如:输入:$s="{`"parameterName`":`"$parameterValue`"}"
powershell输出:{"tableName":"some_string"}
{parameterName:some_string}
所以python完全忽略了双引号,即使它们被转义了。I had to:
- Escape () the Escape (') character:
powershell输入:$s="{`"parameterName`":`"$parameterValue`"}"
powershell输出:{"parameterName":"some_string"}
{"parameterName":"some_string"}
唯一的问题我还没有弄清楚是当$parameterValue
变量包括空间,那么它不工作:
powershell输入:
$parameterValue='some string'
$s="{`"parameterName`":`"$parameterValue`"}"
powershell输出:{"parameterName":"some string"}
python输出:{"parameterName":"some