CPANEL_JSON_XS(1p)

🌸 CPANEL_JSON_XS πŸ’…

okay bestie, sit DOWN, because this is the command-line glow-up of the Cpanel::JSON::XS module β€” it lives in your friendly neighborhood User Contributed Perl Documentation, section <pink>1p</pink> 🫢


✨ NAME ✨

cpanel_json_xs β€” the Cpanel::JSON::XS command-line utility, like, the module but with a main character passport 🌈


πŸŽ€ SYNOPSIS πŸŽ€

cpanel_json_xs [-v] [-f inputformat] [-t outputformat]

πŸ¦‹ DESCRIPTION πŸ¦‹

cpanel_json_xs converts between a bunch of input and output formats, and yes, one of them is JSON (the icon of the group chat, fr fr) πŸ’–

The default input format is json and the default output format is json-pretty. no cap, it just does that out of the box ✨


πŸ‘‘ OPTIONS πŸ‘‘

  • -v β€” be slightly more verbose. just a lil chatty. a whisper of extra info πŸ—£οΈ
  • -f fromformat β€” read a file in the given format from STDIN, because reading is fundamental πŸ“–

fromformat can be one of:

  • json β€” a json text encoded, either utf-8, utf16-be/le, utf32-be/le
  • json-nonref β€” json according to RFC 7159
  • json-relaxed β€” json with all relaxed options
  • json-unknown β€” json with allow_unknown
  • storable β€” a Storable frozen value
  • storable-file β€” a Storable file (Storable has two incompatible formats) 😭
  • bencode β€” uses one of Net::BitTorrent::Protocol::BEP03::Bencode, Bencode or the broken Convert::Bencode, if available (used by torrent files, among others)
  • clzf β€” Compress::LZF format (requires that module to be installed)
  • eval β€” evaluate the given code as (non-utf-8) Perl, basically the reverse of -t dump
  • yaml β€” loose YAML (requires YAML)
  • yaml-tiny β€” loose YAML (requires YAML::Tiny or CPAN::Meta::YAML)
  • yaml-xs β€” strict YAML 1.2 (requires YAML::XS)
  • yaml-syck β€” YAML (requires YAML::Syck)
  • cbor β€” CBOR (via CBOR::XS)
  • string β€” do not attempt to decode the file data
  • sereal β€” Sereal (via Sereal::Decoder)
  • none β€” nothing is read, creates an "undef" scalar β€” mainly useful with -e
  • -t toformat β€” write the file in the given format to STDOUT, i.e. it's giving output πŸ’…

toformat can be one of:

  • json, json-utf-8 β€” json, utf-8 encoded
  • json-pretty β€” as above, but pretty-printed with sorted object keys (aesthetic ✨)
  • json-stringify β€” as json-pretty with allow_stringify
  • json-relaxed β€” as json-pretty, but with the additional options ->allow_stringify->allow_blessed->convert_blessed->allow_unknown->allow_tags->stringify_infnan(1)
  • json-utf-16le, json-utf-16be β€” little endian/big endian utf-16
  • json-utf-32le, json-utf-32be β€” little endian/big endian utf-32
  • storable β€” a Storable frozen value in network format
  • storable-file β€” a Storable file in network format (Storable has two incompatible formats)
  • bencode β€” uses one of Net::BitTorrent::Protocol::BEP03::Bencode, Bencode or the broken Convert::Bencode, if available (used by torrent files, among others)
  • clzf β€” Compress::LZF format
  • yaml β€” loose YAML (requires YAML)
  • yaml-tiny β€” loose YAML (requires YAML::Tiny or CPAN::Meta::YAML)
  • yaml-xs β€” strict YAML 1.2 (requires YAML::XS)
  • yaml-syck β€” YAML (requires YAML::Syck)
  • dump β€” Data::Dump
  • dumper β€” Data::Dumper
  • string β€” writes the data out as if it were a string
  • sereal β€” Sereal (via Sereal::Encoder)
  • none β€” nothing gets written, mainly useful together with -e
⚠️ heads up bestie: note that Data::Dumper doesn't handle self-referential data structures correctly β€” use dump instead. that's not a vibe, that's a bug πŸ’€
  • -e code β€” evaluate perl code after reading the data and before writing it out again β€” can be used to filter, create or extract data. the data that has been read is in $_, and whatever is in there is written out afterwards. so you're literally the main character editing the story mid-scene πŸ”₯

🌈 EXAMPLES 🌈

cpanel_json_xs -t none <isitreally.json

"JSON Lint" ✨ β€” tries to parse the file isitreally.json as JSON. if it is valid JSON, the command outputs nothing (silence, iconic), otherwise it will print an error message and exit with non-zero exit status 😭

<src.json cpanel_json_xs >pretty.json

Prettify the JSON file src.json to dst.json. glow-up complete πŸŽ€

cpanel_json_xs -f storable-file <file

Read the serialized Storable file file and print a human-readable JSON version of it to STDOUT 🫢

cpanel_json_xs -f storable-file -t yaml <file

Same as above, but write YAML instead (not using JSON at all :) β€” a crossover episode 🌸

cpanel_json_xs -f none -e '$_ = [1, 2, 3]'

Dump the perl array as UTF-8 encoded JSON text πŸ’–

<torrentfile cpanel_json_xs -f bencode -e '$_ = join "\n", map @$_, @{$_->{"announce-list"}}' -t string

Print the tracker list inside a torrent file πŸ‘‘

lwp-request http://cpantesters.perl.org/show/Cpanel-JSON-XS.json | cpanel_json_xs

Fetch the cpan-testers result summary "Cpanel::JSON::XS" and pretty-print it ⭐

cpanel_json_xs -f yaml-xs -t yaml-tiny <META.yml   >MYMETA.yml
cpanel_json_xs -f yaml-tiny -t yaml-xs <MYMETA.yml >XSMETA.yml
cpanel_json_xs -f yaml -t yaml <XSMETA.yml #BOOM!
Error: YAML_LOAD_ERR_BAD_MAP_ELEMENT

Compare YAML en- and decoders, and see that YAML::XS generates unparsable YAML at <https://github.com/ingydotnet/yaml-libyaml-pm/issues/9> πŸ’€ not me exposing the whole timeline


πŸ’œ AUTHOR πŸ’œ

Copyright (C) 2008 Marc Lehmann <json@schmorp.de>

Copyright (C) 2016 Cpanel Inc


and that's a wrap, bestie 🫢 this whole thing comes to you courtesy of perl v5.42.3, dated 2026-08-21, and it's the CPANEL_JSON_XS(1p) page β€” slay, read responsibly, and pipe responsibly too πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from