Powershell卷曲双引号

时间:2015-11-04 16:18:37

标签: json powershell curl character-encoding escaping

我试图在powershell中调用curl命令并传递一些JSON信息。

这是我的命令:

curl -X POST -u username:password -H "Content-Type: application/json" -d "{ "fields": { "project": { "key": "key" }, "summary": "summary", "description": "description - here", "type": { "name": "Task" }}}"

我得到了错误的结果和#34;无与伦比的大括号"和主人无法解决等等。

然后我尝试使用反引号字符为字符串中的双引号加前​​缀,但它无法识别描述json字段中的-字符

感谢

编辑1:

当我在常规批处理文件中编写curl命令时,我使用双引号而没有单引号。此外,在-d字符串中,我使用\转义了所有双引号并且命令有效。

在这种情况下,我的curl实际上指向curl.exe。我指定了路径,只是没有在此列出。我还尝试在-d附近添加单引号,我得到了:

curl: option -: is unknown curl: try 'curl --help' or 'curl --manual' for more information

似乎无法识别JSON中的-字符

2 个答案:

答案 0 :(得分:8)

将数据传输到curl.exe,而不是试图将其转义。

$data = @{
    fields = @{
        project = @{
            key = "key"
        }
        summary = "summary"
        description = "description - here"
        type = @{
            name = "Task"
        }
    }
}

$data | ConvertTo-Json -Compress | curl.exe -X POST -u username:password -H "Content-Type: application/json" -d "@-"

如果您使用@-作为数据参数,curl.exe会读取标准输入。

P.S。:我强烈建议您使用正确的数据结构和ConvertTo-Json,如图所示,而不是手动构建JSON字符串。

答案 1 :(得分:1)

简便方法(用于简单测试):

curl -X POST -H "Content-Type: application/json" -d '{ \"field\": \"value\"}'