Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 433 Vote(s) - 3.64 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Windows Batch - Pretty Print JSON per Script

#1
I have multiple JSON-files on a server, which can only run batch-scripts or command-line tools. The JSON files all aren't formatted properly, meaning there are no tab-spaces at the beginning of lines.

Is there a way, to write a batch-script or run a command-line tool to format the files, so they are normal again?
Reply

#2
Super quick way to do it if you have python installed is by typing following in the command prompt or powershell:

type dirty.json | python -m json.tool > pretty.json

where *dirty.json* is minified or unreadable json and *pretty.json* is pretty one. you can even put it in a batch file to run it by passing an argument. Its very fast in processing.

**Explanation:**
type is writing the file content to the console but its piped so it is being sent to python's module json.tool and then '>' writes the output into a file called 'pretty.json'. Try without the `> pretty.json` to see the output in the console.
Reply

#3
You will definitely need an external tool for that. I'm using the [command-line JSON processor `jq`](

[To see links please register here]

) - just pass it the Identity filter `.` and it will pretty print the JSON it's been given as input.

*Update:* Corrected syntax (where did that come from?), Sorry @Delfic and @Sonata. Even though the empty filter `""` from my original answer works, I changed the filter like @Wolf said, as it is indeed mentioned in the [manual](

[To see links please register here]

) as the "absolute simplest filter".

Example:

ECHO { "att1": 1, "att2": 2 } | jq .

Output:

{
"att1": 1,
"att2": 2
}

If you want to process JSON input directly from the shell, you can also use null input `-n`:

jq -n "{ "att1" : 1, "att2" : 2 }"

To process a file, do:

jq . dirty.json

...or, if you're so inclined:

TYPE dirty.json | jq .
Reply

#4
In the spirit of [dnafication](

[To see links please register here]

)'s [`python`-based answer](

[To see links please register here]

) - if you have `perl`, you can do:

TYPE dirt.json | perl -MJSON -0ne "print JSON->new->pretty->encode(decode_json $_)"

This works with any `perl` newer than 5.14 (released 2011-05-14), because `JSON::PP` is a core module since then. Note that this is a pure-perl implementation, which does not perform as well as e.g. `JSON::XS`. [Read this for details](

[To see links please register here]

).
Reply

#5
Windows' `cmd` capabilities are very limited and support for JSON certainly isn't one of them, so I would advice against creating a batch-script! I would highly recommend the command-line tool [tag:xidel] though. It prettifies by default.

**Stdin:**
```
ECHO {"a":1,"b":2,"c":3} | xidel -se "$json"
{
"a": 1,
"b": 2,
"c": 3
}
```
(If the input is JSON, `xidel` will parse and assign it to the (internal) global variable `$json`)

**File/url:**
```
xidel -s "input.json" -e "$json"
#or
xidel -s "https://[...]" -e "$json"
#or
xidel -se "json-doc('file-or-url')"
```

**Write to file:**
```
xidel -s "input.json" -e "$json" > output.json
#or
xidel -s "input.json" -e "file:write('output.json',$json,{'method':'json','indent':true()})"
#or
xidel -se "file:write('output.json',json-doc('input.json'),{'method':'json','indent':true()})"
```

**Process multiple files:**
```
FOR %A IN (*.json) DO @xidel -s %A -e "$json" > %~nA_pretty.json
```
While this would work for lots of JSON-files in a directory, it's also ***extremely*** slow, because `xidel` is called for each and every JSON-file.
`xidel` can do this much more efficiently with the integrated [EXPath File Module](

[To see links please register here]

).

```
xidel -se "file:list(.,false,'json')"
```
This returns a bare list of all JSON-files in the current directory.
(Equivalent of `DIR *.json /B ` and `FOR %A IN (*.json) DO @ECHO %A`)

```
xidel -se "file:list(.,false,'json') ! file:read-text(.)"
#or
xidel -se "for $x in file:list(.,false,'json') return file:read-text($x)"
```
Both commands return the content of each JSON-file in the current directory.
(Equivalent of `FOR %A IN (*.json) DO @TYPE %A`)

```
xidel -se "file:list(.,false,'json') ! json-doc(.)"
#or
xidel -se "for $x in file:list(.,false,'json') return json-doc($x)"
```
Both commands return the prettified parsed JSON content of each JSON-file in the current directory.
(Equivalent of `FOR %A IN (*.json) DO @xidel -s %A -e "$json"`, but ***much*** faster!)

```
xidel -se "file:list(.,false,'json') ! file:write(substring-before(.,'.json')||'_pretty.json',json-doc(.),{'method':'json','indent':true()})"
#or
xidel -se "for $x in file:list(.,false,'json') return file:write(substring-before($x,'.json')||'_pretty.json',json-doc($x),{'method':'json','indent':true()})"
```
Both commands write the prettified parsed JSON content of each JSON-file in the current directory to a new file with a filename which ends with "_pretty".

The final command prettified (with the necessary escape-characters):
```
xidel -se ^"^
for $x in file:list(.,false,'json') return^
file:write(^
substring-before($x,'.json')^|^|'_pretty.json',^
json-doc($x),^
{'method':'json','indent':true()}^
)^
"
```

Please download a `xidel` binary from the recommended ["Development"-branch](

[To see links please register here]

) to use these queries (and `json-doc()` in particular).
If you insist on using `xidel 0.9.8`, then use `json(file:read-text($x))` instead of `json-doc($x)`.
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through