Skip to content

Instantly share code, notes, and snippets.

@navono
Last active February 14, 2024 23:11
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save navono/992727c277bf3478a06540963f48f7e9 to your computer and use it in GitHub Desktop.
Save navono/992727c277bf3478a06540963f48f7e9 to your computer and use it in GitHub Desktop.
parse JSON file by windows batch
:: Read file "package.json" into variable string, removing line breaks.
set string=
for /f "delims=" %%x in (package.json) do set "string=!string!%%x"
rem Remove quotes
set string=%string:"=%
rem Remove braces
set "string=%string:~2,-2%"
rem Change colon+space by equal-sign
set "string=%string:: ==%"
rem Separate parts at comma into individual assignments
set "%string:, =" & set "%"
echo %version%
@TriHydera
Copy link

Just a dumb question, where is %version% defined in the script?

@Ximaz
Copy link

Ximaz commented Apr 9, 2022

Just a dumb question, where is %version% defined in the script?

Let's suppose this is the package.json file the script tries to read :

{
 ...
 "version": "1.0.0",
 ...
}

Then Batch will take the key version from the JSON file as a new variable, which value is the version value linked into the JSON file. That's why you can't use this for huge objects such as this one :

{
 ...
 "version": {
    "debug": "1.0.0",
    "production": "1.0.1"
 },
 ...
}

You would not be able to get the debug and production value using version as key.

@jkearins
Copy link

jkearins commented Mar 8, 2023

Nice code. Sample of package.json:

{ "dummy": "invisible", "dbpath": "c:\tmp", "dbname": "hidra" }

Some limitations:

  • Spaces after first '{' and before last '}' are needed
  • No spaces in keys and in values
    "msg": "Hi all" <-- prohibited
  • One space is necessary after ':'
  • First key:value pair is allways unreachable
echo dummy=%dummy%
echo dbpath=%dbpath%
echo dbname=%dbname%

output:

dummy=
dbpath=c:\tmp
dbname=hidra

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment