The next one does the job -
// 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 is not bullet proof. Use at your own risk.
To create the tool you need JSONKit . 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
Using:
shell% convertPlistTOJSON usage: convertPlistToJSON FILE_PLIST FILE_JSON shell% convertPlistTOJSON input.plist output.json
Reads in input.plist and writes pretty printed JSON to output.json .
johne May 21 '11 at 2:56 a.m. 2011-05-21 02:56
source share