如何使用windows命令行将JSON文件解析为变量?

时间:2013-10-14 08:30:10

标签: json windows command-line

我有一个名为JSON的{​​{1}}文件,上面写着:

test.json

我希望能够在Windows命令行中读取此文件,并将这些对象解析为变量。

我该怎么做?

3 个答案:

答案 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

...就是您所需要的。