批处理文件解析JSON

批处理文件解析JSON,json,batch-file,Json,Batch File,这是我的JSON,我只想设置“1.1.3”,它是从“稳定”对象到批处理文件中变量(不带引号)的版本。 我希望它是动态的,也许将来作曲家会把它改成“版本”:“1.1.3.6”甚至“版本”:“1.1.3-beta2”,我希望得到版本的任何值 多谢各位 myFile.json { "stable": [{"path": "/download/1.1.3/composer.phar", "version": "1.1.3", "min-php": 50300}], "preview":

这是我的JSON,我只想设置“1.1.3”,它是从“稳定”对象到批处理文件中变量(不带引号)的版本。 我希望它是动态的,也许将来作曲家会把它改成“版本”:“1.1.3.6”甚至“版本”:“1.1.3-beta2”,我希望得到版本的任何值

多谢各位

myFile.json

{
    "stable": [{"path": "/download/1.1.3/composer.phar", "version": "1.1.3", "min-php": 50300}],
    "preview": [{"path": "/download/1.1.3/composer.phar", "version": "1.1.3", "min-php": 50300}],
    "snapshot": [{"path": "/composer.phar", "version": "334d0cce6b056e7555daf4c68c48cbe40ee4d51a", "min-php": 50300}]
}

如果我们假设位置从未改变,则代码为:

@echo off
setlocal enableDelayedExpansion
FOR /f "skip=1 tokens=5 delims=:," %%I IN (vers.json) DO IF NOT DEFINED ver SET "ver=%%I"
set ver=%ver:"=%
set ver=%ver: =%
echo !ver!

如果我们假设位置从未改变,则代码为:

@echo off
setlocal enableDelayedExpansion
FOR /f "skip=1 tokens=5 delims=:," %%I IN (vers.json) DO IF NOT DEFINED ver SET "ver=%%I"
set ver=%ver:"=%
set ver=%ver: =%
echo !ver!

看在皮特的份上!使用JSON解析器。数据已经是分层的。将其对象化并挖掘层次结构比标记化并计算行/词要优雅得多

@echo off&setlocal
设置“jsonfile=test.json”
设置“psCmd=”添加类型-As System.Web.Extensions^
$JSON=新对象Web.Script.Serialization.JavaScriptSerializer^
$JSON.DeserializeObject($input).stable.version“”

对于/f%%I in('^为了皮特的爱!使用JSON解析器。数据已经是层次结构。将其对象化并深入层次结构比标记化并计算行/字更优雅

@echo off&setlocal
设置“jsonfile=test.json”
设置“psCmd=”添加类型-As System.Web.Extensions^
$JSON=新对象Web.Script.Serialization.JavaScriptSerializer^
$JSON.DeserializeObject($input).stable.version“”
对于/f%%I英寸('^非常容易:

非常容易:


假设字段的位置永远不会改变,这是一个非常简单的
for/f
循环。到目前为止,您尝试了什么?是的,但我从“”我不确定它们是否改变了位置,cmd有一个解析器,但我不知道它是如何工作的。不幸的是,假设字段的位置从未改变,这是一个非常简单的
for/f
循环。到目前为止,您尝试了什么?是的,但我从“”得到它我不确定他们是否改变了位置,cmd有一个解析器,但我不知道它是如何工作的。不幸的是,谢谢你,你是很棒的,令人惊讶的答案!皮特和雷佩特坐在栅栏上。皮特掉了下来。谁还剩下?重复。皮特和雷佩特坐在栅栏上皮特掉了下来,谁还剩下。继续下去……@JakeOPJ O一种方法是将
for…in(cscript…
行更改为
for/f“delims=“%%I in('cscript/nologo/e:JScript“%~f0”“%URL%”)do set“%%I”
。然后JScript中的任何
WSH.Echo
语句都应该作为
“varname=value”
输出,以分配回cmd批处理运行时。例如:
(obj.stable[0]中的var i){WSH.Echo(i+'='+obj.stable[0][i]);}
@JakeOPJ有两种基本的方法。您可以使用
脚本.FileSystemObject
对象来完成,或者通过将JSON文件重定向到cscript(
cscript…
)中,然后在(WSH.StdIn.ReadLine())时使用
来使用JSON
。对于JScript/VBScript新手来说,第一种方法可能更简单。Google(引号应该需要JScript,不包括JavaScript)。如果你陷入困境,请创建一个新的题贴,标记为JScript,并享受向上投票的分数。谢谢你,你的回答太棒了,太棒了!皮特和雷佩特坐在篱笆上。皮特摔了下来。谁还剩下?重复。皮特和雷佩特坐在篱笆上皮特摔了下来,谁还剩下。继续下去……@JakeOPJ一种方法是改变现状
for…in(cscript…
行至
for/f“delims=“%%I in('cscript/nologo/e:JScript“%%f0”“%URL%”)设置“%%I”
。然后JScript中的任何
WSH.Echo
语句都应输出为
“varname=value”
,以分配回cmd批处理运行时。例如:
for(obj.stable[0]中的var I){WSH.Echo>(i+'='+obj.stable[0][i]);}
@JakeOPJ有两种基本方法。您可以使用
脚本.FileSystemObject
对象来实现,或者将JSON文件重定向到cscript(
cscript…
)中,然后使用
while(WSH.StdIn.ReadLine())使用JSON
。对于JScript/VBScript新手来说,第一种方法可能更简单。Google(引用应该需要JScript并排除JavaScript)。如果您遇到问题,请创建一个新的问题帖子标记JScript,并享受投票的积分。