plist to JSON
Read an Info.plist or any XML property list as JSON. The plist type elements map cleanly: <dict> to an object, <array> to an array, <integer> and <real> to numbers, <true/> and <false/> to booleans.
plist to JSON
A plist <dict> is a flat sequence of alternating <key> and value elements rather than nested pairs, which is why generic XML-to-JSON converters produce something unusable from it. This walks that structure properly, pairing each key with the element that follows it.
How to use it
- Paste the plist XML, or drop an
Info.pliston the pane. - Choose how
<data>blocks are handled — keeping the base64 is faithful; replacing it with a byte count keeps the output readable. - Copy the JSON, or download it.
- For a binary plist, convert it first:
plutil -convert xml1 file.plist.
Type mapping
<dict>→ object, built by pairing each<key>with the following sibling.<array>→ array, in document order.<string>→ string, entities already decoded by the parser.<integer>→ number (integer),<real>→ number (floating point).<true/>and<false/>→true/false.<date>→ the ISO-8601 string as written; JSON has no date type.<data>→ base64 string, a byte-count placeholder, ornull, per the option.
Binary plists
Roughly half the plists on a Mac are in Apple's binary format, which is not XML at all and cannot be parsed here. Convert first with plutil -convert xml1 -o out.plist in.plist (macOS) or plistutil (Linux), then paste the XML.
A quick test: if the file starts with bplist00, it is binary. If it starts with <?xml, you are in the right place.
What the output is good for
Reading an app bundle's Info.plist in a script, diffing two configuration profiles, feeding launchd or MobileConfig settings into a JSON-based pipeline, or just making a deeply nested plist legible. The conversion is one-way here — going back to plist means writing the alternating key/value structure again, which is best done with plutil.
FAQ
Why not just use XML to JSON?
Because a plist <dict> is a flat list of keys and values, a generic converter gives you two parallel arrays — one of keys, one of values — with the pairing lost. This tool understands the plist structure.
Can it read binary plists?
No. Convert with plutil -convert xml1 first. A file beginning bplist00 is binary.
What happens to <data> base64 blobs?
By default the base64 string is kept, which is lossless. For a readable diff, switch to the byte-count placeholder; to drop them entirely, choose null.
Are dates converted to a timestamp?
No, the ISO-8601 text is passed through. JSON has no date type, and reformatting would only add ambiguity.
Is my plist uploaded?
No. It is parsed by your browser, which matters since plists often carry device identifiers and provisioning details.
Related tools
- XML to JSON — for ordinary XML documents
- XML Tree Viewer — browse a large plist before converting
- XML Formatter — indent a minified plist
- XML Validator — check a hand-edited plist parses
- XML Stats — measure a big configuration profile
Privacy
100% client-side. The property list is parsed in your browser. See the privacy policy.