1

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

我有两个变量 -job_id等于10parameterValue等于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"}'
4

2 回答 2

2

尝试构建自己的序列化字符串是一种不好的做法,而是使用预期的方法和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 })
于 2021-10-26T11:21:02.380 回答
0

好的,所以我所做的是

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

2. 使用不同的设置对此进行了测试,例如:

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

电源外壳输出:{"tableName":"some_string"}

蟒蛇输出:{parameterName:some_string}

所以python完全忽略了双引号,即使它们被转义了。

我不得不:

  1. 转义 (\) 转义 (`) 字符:

电源外壳输入:$s="{\`"parameterName\`":\`"$parameterValue\`"}"

电源外壳输出:{\"parameterName\":\"some_string\"}

蟒蛇输出:{"parameterName":"some_string"}



我还没有弄清楚的唯一问题是当$parameterValue变量包含空间时,它不起作用:

电源外壳输入:

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

电源外壳输出:{\"parameterName\":\"some string\"}

蟒蛇输出:{"parameterName":"some

于 2021-10-26T10:38:16.373 回答