Objective c 用于将PLIST转换为JSON的命令行工具?

Objective c 用于将PLIST转换为JSON的命令行工具?,objective-c,json,plist,Objective C,Json,Plist,是否有命令行工具可用于将.plist文件转换为JSON 如果没有,在Mac上使用Objective-C或C创建一个应用程序的方法是什么?例如,Objective-C中有一个JSONKit。如何打开一个.plist文件,将其传递给JSONKit,并将其序列化为JSON?代码非常简单: NSArray* array = [[NSArray arrayWithContentsOfFile:[@"~/input.plist" stringByExpandingTildeInPath]]retain];

是否有命令行工具可用于将.plist文件转换为JSON


如果没有,在Mac上使用Objective-C或C创建一个应用程序的方法是什么?例如,Objective-C中有一个JSONKit。如何打开一个.plist文件,将其传递给JSONKit,并将其序列化为JSON?

代码非常简单:

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个文件

以下是完成工作的方法-

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

shell% convertPlistTOJSON
usage: convertPlistToJSON FILE_PLIST FILE_JSON

shell% convertPlistTOJSON input.plist output.json

读入
input.plist
,并将漂亮打印的JSON写入
output.JSON

我用python编写了一个工具来实现这一点。请看这里:


从OSX或linux发行版上的命令行工作,批处理转换目录。它既短又简单,因此应该很容易为您自己的目的进行修改。

如果您在Mac上,您可以在命令行上使用plutil工具(我相信这是开发人员工具附带的):

如注释中所述,这将覆盖现有数据。输出到新文件的步骤

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

有一种本地方法,将
plist
转换为
json
。它叫

下面是一个关于如何使用它以及如何将
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];
使用macutils

将plist转换为json 将json转换为plist
这将覆盖原始plist。要防止此命令覆盖原始文件,请传递
-o
标志。ie
plutil-convert json Data.plist-o Data.json
这样做的一个复杂之处是,一些plist数据类型不能由plutil转换。我发现的解决方法是在将plist传递给plutil之前对其进行一些预处理。具体到我正在使用的plist,我必须用
替换
标记。您的第二个命令将同样转换原始plist文件。它应该是
plutil-convert json-o Data.json Data.plist
。也就是说,原始plist文件最终应该是@ADAMuse
plutil-convert-r json
要以人类可读的格式接收json,请将连字符作为输出文件发送到stdout
plutil-convert json-o-file.json
plutil -convert json -o Data.json Data.plist
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];
plutil -convert json -o output.json input.plist
plutil -convert xml1 input.json -o output.plist
plutil -convert json -r -e json Filename.plist