web-dev-qa-db-fra.com

Outil en ligne de commande pour convertir PLIST en JSON?

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?

58
dandean

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
150
Dylan

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.

5
johne

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.

2
Rab

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];
2
Leandros

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.

2
skorulis

Utilisation d'utilitaires mac

Convertir plist -> json

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

Convertir json -> plist

plutil -convert xml1 input.json -o output.plist
0
Lal Krishna