Objective c 用于将PLIST转换为JSON的命令行工具?
是否有命令行工具可用于将.plist文件转换为JSONObjective 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];
如果没有,在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
标志。ieplutil-convert json Data.plist-o Data.json
这样做的一个复杂之处是,一些plist数据类型不能由plutil转换。我发现的解决方法是在将plist传递给plutil之前对其进行一些预处理。具体到我正在使用的plist,我必须用
替换
和
标记。您的第二个命令将同样转换原始plist文件。它应该是plutil-convert json-o Data.json Data.plist
。也就是说,原始plist文件最终应该是@ADAMuseplutil-convert-r json
要以人类可读的格式接收json,请将连字符作为输出文件发送到stdoutplutil-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