JSON Tools
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Posted on 05-08-2022 10:09 AM
Is there a macOS command-line tool available for JSON that provides parsing functions like xmllint?
I seem to be able to find lots of validators and pretty-printers. But I need a tool I can run inside shell scripts to parse output responses from Jamf Pro's API.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Posted on 05-08-2022 03:45 PM
jq is what comes to mind first: https://stedolan.github.io/jq/
But it is not installed by default, so you would have to install it on a system before being able to query JSON.
@mm2270 posted a way to parse JSON in shell, but I do not recall which post it was in and I'm too lazy to go find it (sorry Mike :-) )
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Posted on 05-08-2022 09:03 PM
+1 for jq. It's a must have. plutil can extract data from json but you need to have Monterey installed

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Posted on 05-09-2022 02:15 PM
Hmm, I wish I could remember what that was also. 🤔
I do think at one time I found a way to "pretty print" JSON input using python, but that certainly isn't the same as parsing the JSON. And anything relying on legacy python 2 at this point I've removed or am removing from any of my scripts.
There's very likely a python 3 method to do the same thing. But then you need to ship python 3 to your Macs. 😕 It might just be easier to deploy jq, which comes up in almost any question out on the web on how to parse JSON, though I've never used it myself.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Posted on 05-09-2022 05:02 AM
You can also use the JavaScript objective-c bridge in Apple script via ZSH without needing to install anything else.
add the below to a bash/zsh script
deviceJsonData=$(Json data source)
userJsonData=$(Json data source)
getJson() {
# $1: JSON string to parse, $2: JSON key to look up
JSON="$1" osascript -l 'JavaScript' \
-e 'const env = $.NSProcessInfo.processInfo.environment.objectForKey("JSON").js' \
-e "JSON.parse(env).$2"
}
parse by passing with dot notation:
device=$(getJson "$deviceJsonData" 'device')
firstName=$(getJson "$userJsonData" 'profile.firstName')
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Posted on 05-11-2022 01:59 PM
Recommend this. It works in bash as well. I have been using it to run scripts utilizing the API on users' devices without having to push out tools. Very useful.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-09-2024 10:20 AM - edited 01-09-2024 10:21 AM
The binary you were thinking of is json_pp -
% echo '{"SPHardwareDataType":[{"_name":"hardware_overview","activation_lock_status":"activation_lock_disabled","boot_rom_version":"10151.61.4","chip_type":"Apple M2 Pro","machine_model":"Mac14,10","machine_name":"MacBook Pro","model_number":"MNW83LL/A","number_processors":"proc 12:8:4","os_loader_version":"10151.61.4","physical_memory":"16 GB","platform_UUID":"D07A2309-7CD0-5086-ACF4-A99DA8688860","provisioning_UDID":"00006020-001A01E222C3C01E","serial_number":"MQVWG6NM2J"}]}' | json_pp -t json
{
"SPHardwareDataType" : [
{
"_name" : "hardware_overview",
"activation_lock_status" : "activation_lock_disabled",
"boot_rom_version" : "10151.61.4",
"chip_type" : "Apple M2 Pro",
"machine_model" : "Mac14,10",
"machine_name" : "MacBook Pro",
"model_number" : "MNW83LL/A",
"number_processors" : "proc 12:8:4",
"os_loader_version" : "10151.61.4",
"physical_memory" : "16 GB",
"platform_UUID" : "D07A2309-7CD0-5086-ACF4-A99DA8688860",
"provisioning_UDID" : "00006020-001A01E222C3C01E",
"serial_number" : "MQVWG6NM2J"
}
]
}
Please also see: https://community.jamf.com/t5/jamf-pro/json-amp-the-arg-nauts/td-p/307625
