Le code suivant permet de faire le travail —
// convertPlistToJSON.m
#import
#import "JSONKit.h"
int main(int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
if(argc != 3) { fprintf(stderr, "utilisation: %s FICHIER_PLIST FICHIER_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(@"Impossible de lire le fichier plist. Erreur: %@, info: %@", error, [error userInfo]);
exit(1);
}
id plist = [NSPropertyListSerialization propertyListWithData:plistFileData options:NSPropertyListImmutable format:NULL error:&error];
if(plist == NULL) {
NSLog(@"Impossible de désérialiser la liste de propriétés. Erreur: %@, info: %@", error, [error userInfo]);
exit(1);
}
NSData *jsonData = [plist JSONDataWithOptions:JKSerializeOptionPretty error:&error];
if(jsonData == NULL) {
NSLog(@"Impossible de sérialiser le plist en JSON. Erreur: %@, info: %@", error, [error userInfo]);
exit(1);
}
if([jsonData writeToFile:jsonFileNameString options:NSDataWritingAtomic error:&error] == NO) {
NSLog(@"Impossible d'écrire le JSON dans le fichier. Erreur: %@, info: %@", error, [error userInfo]);
exit(1);
}
[pool release]; pool = NULL;
return(0);
}
Cela effectue une vérification raisonnable des erreurs, mais ce n'est pas infaillible. Utilisez à vos risques et périls.
Vous aurez besoin de JSONKit pour compiler l'outil. Placez JSONKit.m
et JSONKit.h
dans le même répertoire que convertPlistToJSON.m
, puis compilez avec:
shell% gcc -o convertPlistToJSON convertPlistToJSON.m JSONKit.m -framework Foundation
Utilisation:
shell% convertPlistTOJSON
utilisation: convertPlistToJSON FICHIER_PLIST FICHIER_JSON
shell% convertPlistTOJSON input.plist output.json
Lit input.plist
, et écrit le JSON joliment imprimé dans output.json
.