9

我有这个JSON文件test.json,它说:

{
    "test":true,
    "limit": 
    {
        "min":0.5,
        "max":1.5
    }
}

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

我该怎么做?

4

3 回答 3

11

如果您使用 Windows Powershell 作为命令行,则可以使用ConvertFrom-JSONcmdlet: http: //powershelljson.codeplex.com/

确保您的 PowerShell 版本高于 3.0,因为ConvertFrom-JSON 可从该版本获得

如果您使用普通的旧 CMD,则需要一个外部工具。我喜欢 jq:http ://stedolan.github.io/jq/ 。本教程curl用于示例,但您可以轻松地使用echo或从文件中读取 JSON。

于 2013-10-14T08:36:37.583 回答
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

...是你所需要的全部。

于 2020-06-06T15:18:49.353 回答
0

PowerShell 示例。从文件创建:$js = Get-Content file.json | ConvertFrom-Json. 获取子项:$js.key.subkey

于 2020-05-14T17:04:00.783 回答