Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Command-line tool for converting PLIST to JSON?

Is there a command line tool available for converting .plist files to JSON?

If not, what would be the approach for creating one using Objective-C or C on a Mac? For instance, there is JSONKit, for Objective-C. How would one go about opening a .plist file, pass it to JSONKit, and serialize that as JSON?

like image 914
dandean Avatar asked May 20 '11 00:05

dandean


3 Answers

If you are on a Mac you can use the plutil tool on the command line (this comes with the developer tools I believe):

plutil -convert json Data.plist

as mentioned in the comments, this will overwrite the existing data. To output to a new file

plutil -convert json -o Data.json Data.plist
like image 140
Dylan Avatar answered Nov 05 '22 13:11

Dylan


The following gets the job done—

// convertPlistToJSON.m
#import <Foundation/Foundation.h>
#import "JSONKit.h"

int main(int argc, char *argv[]) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  if(argc != 3) { fprintf(stderr, "usage: %s FILE_PLIST FILE_JSON\n", argv[0]); exit(5); }

  NSString *plistFileNameString = [NSString stringWithUTF8String:argv[1]];
  NSString *jsonFileNameString  = [NSString stringWithUTF8String:argv[2]];

  NSError *error = NULL;

  NSData *plistFileData = [NSData dataWithContentsOfFile:plistFileNameString options:0UL error:&error];
  if(plistFileData == NULL) {
    NSLog(@"Unable to read plist file.  Error: %@, info: %@", error, [error userInfo]);
    exit(1);
  }

  id plist = [NSPropertyListSerialization propertyListWithData:plistFileData options:NSPropertyListImmutable format:NULL error:&error];
  if(plist == NULL) {
    NSLog(@"Unable to deserialize property list.  Error: %@, info: %@", error, [error userInfo]);
    exit(1);
  }

  NSData *jsonData = [plist JSONDataWithOptions:JKSerializeOptionPretty error:&error];
  if(jsonData == NULL) {
    NSLog(@"Unable to serialize plist to JSON.  Error: %@, info: %@", error, [error userInfo]);
    exit(1);
  }

  if([jsonData writeToFile:jsonFileNameString options:NSDataWritingAtomic error:&error] == NO) {
    NSLog(@"Unable to write JSON to file.  Error: %@, info: %@", error, [error userInfo]);
    exit(1);
  }

  [pool release]; pool = NULL;
  return(0);
}

It does some reasonable error checking, but it's not bullet proof. Use at your own risk.

You'll need JSONKit to build the tool. Place JSONKit.m and JSONKit.h in the same directory as convertPlistToJSON.m, and then compile with:

shell% gcc -o convertPlistToJSON convertPlistToJSON.m JSONKit.m -framework Foundation

Usage:

shell% convertPlistTOJSON
usage: convertPlistToJSON FILE_PLIST FILE_JSON

shell% convertPlistTOJSON input.plist output.json

Reads in input.plist, and writes the pretty printed JSON to output.json.

like image 5
johne Avatar answered Nov 05 '22 12:11

johne


Using mac utils

Convert plist to json

plutil -convert json -o output.json input.plist

Convert json to plist

plutil -convert xml1 input.json -o output.plist
like image 3
Lal Krishna Avatar answered Nov 05 '22 14:11

Lal Krishna