Инструмент командной строки для преобразования PLIST в JSON? - PullRequest
57 голосов
/ 20 мая 2011

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

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

Ответы [ 6 ]

149 голосов
/ 12 июня 2012

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

plutil -convert json Data.plist

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

plutil -convert json -o Data.json Data.plist
5 голосов
/ 21 мая 2011

Следующие задания выполняются & mdash;

// 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.

2 голосов
/ 30 апреля 2014

Существует собственный способ конвертации 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];
2 голосов
/ 01 января 2012

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

http://sourceforge.net/projects/plist2json

Работает из командной строки на дистрибутивах OS X или Linux, пакетно конвертирует каталог. Он короткий и простой, поэтому его легко модифицировать для ваших собственных целей.

2 голосов
/ 20 мая 2011

Код довольно прост, чтобы сделать это:

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 файла.

0 голосов
/ 03 июня 2019

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

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

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

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

plutil -convert xml1 input.json -o output.plist
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...