Existe-t-il un outil en ligne de commande pour convertir les fichiers .plist en JSON?
Sinon, quelle serait l'approche pour en créer un en utilisant Objective-C ou C sur un Mac? Par exemple, il y a JSONKit, pour Objective-C. Comment ouvrir un fichier .plist, le transmettre à JSONKit et le sérialiser en JSON?
Si vous êtes sur un Mac, vous pouvez utiliser l'outil plutil sur la ligne de commande (cela vient avec les outils de développement je crois):
plutil -convert json Data.plist
comme mentionné dans les commentaires, cela écrasera les données existantes. Pour sortir vers un nouveau fichier
plutil -convert json -o Data.json Data.plist
Ce qui suit fait le travail ...
// 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);
}
Il fait une vérification d'erreur raisonnable, mais ce n'est pas à l'épreuve des balles. À utiliser à vos risques et périls.
Vous aurez besoin de JSONKit pour construire l'outil. Endroit 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
Usage:
Shell% convertPlistTOJSON
usage: convertPlistToJSON FILE_PLIST FILE_JSON
Shell% convertPlistTOJSON input.plist output.json
Lit dans input.plist
, et écrit le joli JSON imprimé dans output.json
.
J'ai écrit un outil en python pour ce faire. Voir ici:
http://sourceforge.net/projects/plist2json
Fonctionne à partir de la ligne de commande sur les distributions os x ou linux, convertit par lots un répertoire. Il est court et simple, il devrait donc être facile de le modifier à vos propres fins.
Il existe une méthode native pour convertir les plist
en json
. Cela s'appelle NSJSONSerialization .
Voici un exemple sur la façon de l'utiliser et de convertir un fichier plist
en un fichier json
:
NSDictionary *plistDict = [NSDictionary dictionaryWithContentsOfFile:@"input.plist"];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:plistDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[jsonString writeToFile:@"output.json" atomically:NO encoding:NSUTF8StringEncoding error:&error];
Le code est assez simple à faire:
NSArray* array = [[NSArray arrayWithContentsOfFile:[@"~/input.plist" stringByExpandingTildeInPath]]retain];
SBJsonWriter* writer = [[SBJsonWriter alloc] init];
NSString* s = [[writer stringWithObject:array] retain];
[s writeToFile:[@"~/output.json" stringByExpandingTildeInPath] atomically:YES];
[array release];
Je n'ai jamais réussi à lui faire accepter des arguments car je n'avais besoin que de 3 fichiers.
Utilisation d'utilitaires mac
plutil -convert json -o output.json input.plist
plutil -convert xml1 input.json -o output.plist