xmltoolskit.org
XML utilities, in the browser
Say hi →

plist to JSON

updated 20 August 2026 · XML plist 1.0 · dict / array / data

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 → json
Drop a .plist file here, or
ready

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

  1. Paste the plist XML, or drop an Info.plist on the pane.
  2. Choose how <data> blocks are handled — keeping the base64 is faithful; replacing it with a byte count keeps the output readable.
  3. Copy the JSON, or download it.
  4. For a binary plist, convert it first: plutil -convert xml1 file.plist.

Type mapping

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

Privacy

100% client-side. The property list is parsed in your browser. See the privacy policy.