A continuación se realiza el trabajo —
// 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);
}
Lo hace algunas comprobaciones de error razonable, pero no es a prueba de balas. Úselo bajo su propio riesgo.
Necesitará JSONKit para construir la herramienta. Coloque JSONKit.m
y JSONKit.h
en el mismo directorio que convertPlistToJSON.m
, y luego compilar con:
shell% gcc -o convertPlistToJSON convertPlistToJSON.m JSONKit.m -framework Foundation
Uso:
shell% convertPlistTOJSON
usage: convertPlistToJSON FILE_PLIST FILE_JSON
shell% convertPlistTOJSON input.plist output.json
lee en input.plist
, y escribe el JSON bastante impresa a output.json
.
Esto sobrescribirá el plist originales. Para evitar que este comando sobrescriba el archivo original, pase el indicador '-o'. es decir 'plutil -convert json Data.plist -o Data.json' – ADAM
Una complicación con esto es que algunos tipos de datos Plist no se pueden convertir por plutil. La solución alternativa que encontré fue hacer un preprocesamiento en el plist antes de pasarlo a plutil. Específico para el plist con el que estoy trabajando, tuve que reemplazar las etiquetas '' y '' con ''. –
dandean
No sé en qué Mac se supone que debe funcionar, pero en 10.6 dice: 'Especificador de formato desconocido: json' – Tobia