Flo*_*Woo 3 windows powershell cmd jq
我真的很努力地让 Windows shell 与 jq 一起工作并且失败了。
我希望这种类型的东西起作用
echo '["a","b","c"]' | .\Downloads\jq.exe -r '{ "data": map({ "{#SNAME}": . })}'
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
jq:错误:语法错误,意外的“。” (Windows cmd shell 引用问题?)在第 1 行:
如果我只是这样做,echo '["a","b","c"]' | .\Downloads\jq.exe -r '.'那么它很高兴,但是一旦我添加其他字符,echo '["a","b","c"]' | .\Downloads\jq.exe -r '{.}'它就会再次失败:
jq:错误:语法错误,意外的“。” (Windows cmd shell 引用问题?)在第 1 行:
有谁知道如何让 Windows shell 对 jq 感到满意,以使上述示例按预期工作?
使用来自 jq 网站的最新 1.6 版本进行这些测试,并确认 jq 命令使用 Linux 和 jqplay.org 工作。
谢谢你。
您有三个主要选择:
(简单)将 JSON 和 jq 程序放入单独的文件中(或者小心地放入一个文件中),并相应地调用 jq。
(容易出错)遵循您正在使用的 shell 的引用规则。
以上的一些组合。
我理解的基本规则如下:在 Windowscmd命令行提示符下,为了引用字符串,您使用双引号,并使用反斜杠转义字符串中的双引号。
例如:
C>ver
Microsoft Windows [Version 10.0.17134.590]
C>echo "hello \"world\"" | jq .
"hello \"world\""
C>jq -n "\"hello world\""
"hello world"
Run Code Online (Sandbox Code Playgroud)
C>echo ["a","b","c"] | jq -c "{\"data\":map({\"{#SNAME}\":.})}"
{"data":[{"{#SNAME}":"a"},{"{#SNAME}":"b"},{"{#SNAME}":"c"}]}
Run Code Online (Sandbox Code Playgroud)
除了字符串中的哈希 ( #) 和大括号 ( {}) 之外,可以通过避免空格来实现目标:
C>echo ["a","b","c"] | jq -c {"data":map({"SNAME":.})}
{"data":[{"SNAME":"a"},{"SNAME":"b"},{"SNAME":"c"}]}
Run Code Online (Sandbox Code Playgroud)
同样,除了散列和大括号,简单的解决方案是可能的:
使用单引号字符串:
echo '["a", "b", "c"]' | jq -c '{"data": map( {"SNAME": . })}'
{"data":[{"SNAME":"a"},{"SNAME":"b"},{"SNAME":"c"}]}
Run Code Online (Sandbox Code Playgroud)
使用""内部双引号字符串:
echo '["a", "b", "c"]' | jq -c "{""data"": map( {""SNAME"": . })}"
{"data":[{"SNAME":"a"},{"SNAME":"b"},{"SNAME":"c"}]}
Run Code Online (Sandbox Code Playgroud)
我见过的 PowerShell 文档表明反引号可用于转义双引号字符串中的特殊字符,但 YMMV。
博纳机会!
| 归档时间: |
|
| 查看次数: |
2553 次 |
| 最近记录: |