我有一个名为JSON
的{{1}}文件,上面写着:
test.json
我希望能够在Windows命令行中读取此文件,并将这些对象解析为变量。
我该怎么做?
答案 0 :(得分:5)
如果您使用Windows Powershell作为命令行,则可以使用ConvertFrom-JSON
cmdlet:http://powershelljson.codeplex.com/
确保您的PowerShell版本高于3.0,为ConvertFrom-JSON is available from that version。
如果你使用普通的旧CMD,你需要一个外部工具。我喜欢jq:http://stedolan.github.io/jq/。本教程使用curl
作为示例,但您可以轻松使用echo
或从文件中读取JSON。
答案 1 :(得分:0)
PowerShell示例。
根据文件创建:$js = Get-Content file.json | ConvertFrom-Json.
获取子项:$js.key.subkey
答案 2 :(得分:0)
我希望能够在Windows命令行中读取该文件,并将这些对象解析为变量。
我将其解释为:
SET min=0.5
SET max=1.5
对于此任务,我建议使用功能强大的工具xidel
。
基本命令:
xidel -s test.json -e "$json/limit/min" -e "$json/limit/max"
xidel -s test.json -e "$json/limit/(min,max)"
无论是使用2个查询返回每个值,还是使用1个查询返回两个值,两个命令都应返回:
0.5
1.5
使用自定义变量名导出:
FOR /F "delims=" %A IN ('xidel -s test.json -e "min:=$json/limit/min" -e "max:=$json/limit/max" --output-format^=cmd') DO %A
FOR /F "delims=" %A IN ('xidel -s test.json -e "$json/limit/(min:=min,max:=max)" --output-format^=cmd') DO %A
两个命令都可以:
SET min=0.5
SET max=1.5
以键名作为变量名导出:
FOR /F "delims=" %A IN ('xidel -s test.json -e "$json/(limit)() ! eval(x'{.}:=$json/limit/{.}')[0]" --output-format^=cmd') DO %A
要回答我自己的问题:
FOR /F "delims=" %%i in ('type test.json ^| jq .limit.min') DO SET min=%%i
如果这就是您想要的,那么...
FOR /F "delims=" %A IN ('xidel -s test.json -e "$json/limit/min"') DO SET min=%A
或...
FOR /F "delims=" %A IN ('xidel -s test.json -e "min:=$json/limit/min" --output-format^=cmd') DO %A
...就是您所需要的。