使用批处理脚本从 json 文件读取 URL

Reading URL from json file by using batch script

我正在通过批处理脚本读取配置 json 文件并动态创建变量。

json 文件的内容如下

{ 
"ApplicationId":"c2b925c2-e5c9-4534-b855-43534",
"ApplicationProcess":"453453-ca1c-4735-806a-45345",
"VersionComponentId":"4533-35d2-4f0c-bb7a-rtert",
"uDClientFolder":"/udclient/",
"FID":"myId",
"FAuthToken":"mypassword",
"uDeployUrl":"https://myurl:8445",
"outPutDir":"..\Binaries\_PublishedWebsites\OutPut",
}

读取变量的批处理脚本如下

for /f "tokens=1,2 delims=:, " %%a in (' find ":" ^< ".\%jsonConfigFile%" ') do (


   set a=%%~a: =%
   set b=%%~b: =%
   set "%%~a=%%~b"
)

这里我面临两个问题。 1. 无法读取 uDeployUrl,因为它包含://。我只得到 url 的 https 部分。 2. 如果我的 json 在键名前包含 space "Application":"value" 然后变量名也将在其名称中包含 space 。那么我怎样才能从变量名

中删除开始space

提前致谢。

for /f "tokens=1* delims=:" %%a in ('find ":" "%jsonConfigFile%"') do set "%%~a=%%~b
  • 使用tokens=1*:之后的所有内容都变成%%b
  • 使用 ~ 前缀去除 %%a 周围的引号和 %%b
  • 的开头引号
  • 由于 %%b 中的最后一个引号后面跟着 , 它不会被删除,但我们可以简单地将整个 set 赋值括在双引号中,方法是在它前面加上一个双引号这样最终的分配将是例如 set "uDeployUrl=https://myurl:8445", - 最后一个逗号将被忽略。
  • find的第二个参数是一个文件名,所以不需要通过<
  • 使用输入重定向

首先,您的配置 json 文件无效。 "outPutDir" 对象值中的反斜杠需要转义。因此,有效的 json 将是:

{
  "ApplicationId": "c2b925c2-e5c9-4534-b855-43534",
  "ApplicationProcess": "453453-ca1c-4735-806a-45345",
  "VersionComponentId": "4533-35d2-4f0c-bb7a-rtert",
  "uDClientFolder": "/udclient/",
  "FID": "myId",
  "FAuthToken": "mypassword",
  "uDeployUrl": "https://myurl:8445",
  "outPutDir": "..\Binaries\_PublishedWebsites\OutPut"
}

我建议使用合适的 JSON 解释器,例如 Xidel:

xidel -s config.json -e "$json() ! eval(x'{.}:=$json/{.}')[0]"
ApplicationId := c2b925c2-e5c9-4534-b855-43534
ApplicationProcess := 453453-ca1c-4735-806a-45345
VersionComponentId := 4533-35d2-4f0c-bb7a-rtert
uDClientFolder := /udclient/
FID := myId
FAuthToken := mypassword
uDeployUrl := https://myurl:8445
outPutDir := ..\Binaries\_PublishedWebsites\OutPut

Xidel 打开 'config.json'。默认情况下 $json 代表 json 的内容。 $json() 包含所有对象属性的序列:

ApplicationId
ApplicationProcess
VersionComponentId
uDClientFolder
FID
FAuthToken
uDeployUrl
outPutDir

这些字符串被馈送到 (!) eval-function 并且输出可以在上面看到。

实际批量导出这些变量:

FOR /F "delims=" %%A IN ('xidel -s config.json -e "$json() ! eval(x'{.}:=$json/{.}')[0]" --output-format^=cmd') DO %%A
SET ApplicationId=c2b925c2-e5c9-4534-b855-43534
SET ApplicationProcess=453453-ca1c-4735-806a-45345
SET VersionComponentId=4533-35d2-4f0c-bb7a-rtert
SET uDClientFolder=/udclient/
SET FID=myId
SET FAuthToken=mypassword
SET uDeployUrl=https://myurl:8445
SET outPutDir=..\Binaries\_PublishedWebsites\OutPut