web-dev-qa-db-ja.com

PLISTをJSONに変換するためのコマンドラインツールですか?

.plistファイルをJSONに変換するためのコマンドラインツールはありますか?

そうでない場合、MacでObjective-CまたはCを使用して作成する方法は何ですか?たとえば、Objective-C用のJSONKitがあります。 .plistファイルを開いてJSONKitに渡し、それをJSONとしてシリアル化するにはどうすればよいですか?

58
dandean

Macを使用している場合は、コマンドラインでplutilツールを使用できます(これには、開発者ツールが付属しています)。

plutil -convert json Data.plist

コメントで述べたように、これは既存のデータを上書きします。新しいファイルに出力するには

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

以下は仕事を終わらせます—

// 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.hconvertPlistToJSON.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に書き込みます。

5
johne

pythonでこれを行うためのツールを作成しました。こちらをご覧ください。

http://sourceforge.net/projects/plist2json

OS XまたはLinuxディストリビューションのコマンドラインから動作し、バッチでディレクトリを変換します。短くてシンプルなので、自分の目的に合わせて簡単に変更できるはずです。

2
Rab

plistjsonに変換するネイティブな方法があります。 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
Leandros

コードはこれを行うのはかなり簡単です:

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つのファイルを実行するだけでよいため、引数を受け入れるようにはなりませんでした。

2
skorulis

Mac utilsを使用する

Plistの変換-> json

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

JSONを変換-> plist

plutil -convert xml1 input.json -o output.plist
0
Lal Krishna