.plistファイルをJSONに変換するためのコマンドラインツールはありますか?
そうでない場合、MacでObjective-CまたはCを使用して作成する方法は何ですか?たとえば、Objective-C用のJSONKitがあります。 .plistファイルを開いてJSONKitに渡し、それをJSONとしてシリアル化するにはどうすればよいですか?
Macを使用している場合は、コマンドラインでplutilツールを使用できます(これには、開発者ツールが付属しています)。
plutil -convert json Data.plist
コメントで述べたように、これは既存のデータを上書きします。新しいファイルに出力するには
plutil -convert json -o Data.json Data.plist
以下は仕事を終わらせます—
// 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
に書き込みます。
pythonでこれを行うためのツールを作成しました。こちらをご覧ください。
http://sourceforge.net/projects/plist2json
OS XまたはLinuxディストリビューションのコマンドラインから動作し、バッチでディレクトリを変換します。短くてシンプルなので、自分の目的に合わせて簡単に変更できるはずです。
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];
コードはこれを行うのはかなり簡単です:
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つのファイルを実行するだけでよいため、引数を受け入れるようにはなりませんでした。
Mac utilsを使用する
plutil -convert json -o output.json input.plist
plutil -convert xml1 input.json -o output.plist