2011-07-27 7 views
2

NSObjectをJSONに変換して再利用するための使いやすいライブラリウィジェットの例が必要です。JSonを解析するためにネット上でたくさんの例を解析しましたが、 SBJSONを使用してNSObjectをJSONに変換する、誰かが良いチュートリアルやNSObjectをJSONに変換するサンプルコードを持っていますか?SBJsonやその他のJSONライブラリを使用してオブジェクトをJsonに変換する

答えて

12

SBJsonを使用して、オブジェクトをJSON文字列に変換するには、proxyForJsonメソッドをオーバーライドする必要があります。 、以下のような実装ファイルで

.hファイル、

@interface MyCustomObject : NSObject { 
    NSString *receiverFirstName; 
    NSString *receiverMiddleInitial; 
    NSString *receiverLastName; 
    NSString *receiverLastName2; 
} 
@property (nonatomic, retain) NSString *receiverFirstName; 
@property (nonatomic, retain) NSString *receiverMiddleInitial; 
@property (nonatomic, retain) NSString *receiverLastName; 
@property (nonatomic, retain) NSString *receiverLastName2; 

- (id) proxyForJson; 
- (int) parseResponse :(NSDictionary *) receivedObjects; 
} 

- (id) proxyForJson { 

     return [NSDictionary dictionaryWithObjectsAndKeys: 
      receiverFirstName, @"ReceiverFirstName", 
      receiverMiddleInitial, @"ReceiverMiddleInitial", 
      receiverLastName, @"ReceiverLastName", 
      receiverLastName2, @"ReceiverLastName2", 
      nil ]; 
    } 

そして、あなたはこのようなparseResponseメソッドを記述する必要がJSON文字列からオブジェクトを取得します、

- (int) parseResponse :(NSDictionary *) receivedObjects { 
    self.receiverFirstName = (NSString *) [receivedObjects objectForKey:@"ReceiverFirstName"]; 
    self.receiverLastName = (NSString *) [receivedObjects objectForKey:@"ReceiverLastName"]; 

    /* middleInitial and lastname2 are not required field. So server may return null value which 
    eventually JSON parser return NSNull. Which is unrecognizable by most of the UI and functions. 
    So, convert it to empty string. */ 
    NSString *middleName = (NSString *) [receivedObjects objectForKey:@"ReceiverMiddleInitial"]; 
    if ((NSNull *) middleName == [NSNull null]) { 
     self.receiverMiddleInitial = @""; 
    } else { 
     self.receiverMiddleInitial = middleName; 
    } 

    NSString *lastName2 = (NSString *) [receivedObjects objectForKey:@"ReceiverLastName2"]; 
    if ((NSNull *) lastName2 == [NSNull null]) { 
     self.receiverLastName2 = @""; 
    } else { 
     self.receiverLastName2 = lastName2; 
    } 

    return 0; 
} 
13

SBJSONでは、とても簡単です。もちろん

NSString *myDictInJSON = [myDict JSONRepresentation]; 
NSString *myArrayInJSON = [myArray JSONRepresentation]; 

、他の方法で配列を行くためには、実行します。

NSDictionary *myDict = [myDictInJSON JSONValue]; 
NSArray *myArray = [myArrayInJSON JSONValue]; 
+0

これは、辞書や配列を変換するだけですか?もしそうなら、NSObjectをdictonaryに変換する方法があるのでしょうか、それとも手動で作成する必要がありますか?デフォルトで – Radu

+1

、私はそう信じています。論理的には、サブクラスがクラスの基本を変更しない限り、 '[(NSDictionary *)myCustomDict JSONRepresentation]'のようなキャストされたサブクラスも受け入れる必要があります。ただし、NSObjectは必ずしもキーと値のペアのセットではなく、リストでもないため、任意のNSObjectで動作するわけではありません。 –

+1

これを行うには、私はNSObjectの値を反復し、NSDictionaryを作成することをお勧めします。 NSObjectをサブクラス化する場合は、同じ方法をとる '-dictionaryForm'メソッドを持つことを検討してください。 –

2

JSON文字列からオブジェクトへ:

SBJsonParser *parser = [[SBJsonParser alloc] init]; 

// gives array as output 

id objectArray = [parser objectWithString:@"[1,2,3]"]; 

// gives dictionary as output 

id objectDictionary = [parser objectWithString:@"{\"name\":\"xyz\",\"email\":\"[email protected]\"}"]; 

JSON文字列へのオブジェクトから:

SBJsonWriter *writer = [[SBJsonWriter alloc] init]; 

id *objectArray = [NSArray arrayWithObjects:@"Hello",@"World", nil]; 

// Pass an Array or Dictionary object. 

id *jsonString = [writer stringWithObject:objectArray]; 
関連する問題