Инструмент командной строки для преобразования PLIST в JSON?

Есть ли инструмент командной строки для преобразования файлов .plist в JSON?

Если нет, то каким будет подход для создания одного с помощью Objective-C или C на Mac? Например, JSONKit для Objective-C. Как можно открыть файл .plist, передать его JSONKit и сериализовать его как JSON?

Ответ 1

Если вы находитесь на Mac, вы можете использовать инструмент plutil в командной строке (это связано с инструментами разработчика, которые я считаю):

plutil -convert json Data.plist

как указано в комментариях, это перезапишет существующие данные. Для вывода в новый файл

plutil -convert json -o Data.json Data.plist

Ответ 2

Следующее выполняет задание —

// 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);
}

Он выполняет некоторую разумную проверку ошибок, но это не доказательство пули. Используйте на свой страх и риск.

Для создания инструмента вам понадобится JSONKit. Поместите JSONKit.m и JSONKit.h в ту же директорию, что и convertPlistToJSON.m, а затем скомпилируйте с помощью:

shell% gcc -o convertPlistToJSON convertPlistToJSON.m JSONKit.m -framework Foundation

Использование:

shell% convertPlistTOJSON
usage: convertPlistToJSON FILE_PLIST FILE_JSON

shell% convertPlistTOJSON input.plist output.json

Считывает в input.plist и записывает довольно печатный JSON в output.json.

Ответ 3

Код довольно прост для этого:

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

Я никогда не оборачивался, чтобы заставить его принимать аргументы, поскольку мне нужно было всего 3 файла.

Ответ 4

Я написал инструмент в python для этого. См. Здесь:

http://sourceforge.net/projects/plist2json

Работает из командной строки на os x или linux distros, пакетная конвертирует каталог. Он короткий и простой, поэтому его легко изменить в своих целях.

Ответ 5

Существует собственный способ преобразования plist в json. Он назывался NSJSONSerialization.

Вот пример того, как его использовать, и преобразуйте файл plist в файл 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];

Ответ 6

Использование утилит mac

Конвертировать plist в json

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

Преобразовать json в plist

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