2011-07-27 63 views
2

我需要一个易于使用的库whit例子,用于将NSObject转换为JSON并再次返回,我在网络上发现了大量解析JSon的解析示例,但不是太多使用SBJSON将NSObject转换为JSON,Anybody body有一个很好的教程或将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 ]; 
    } 

,并从JSON字符串获取对象,你必须写一个parseResponse方法是这样,

- (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或我必须创建manualy? – Radu

+1

默认情况下,我相信如此。从逻辑上讲,它也应该接受铸造的子类,就像这样:'[(NSDictionary *)myCustomDict JSONRepresentation]',只要你的子类没有对类的基础做任何改变。 –

+1

然而,它不会在任何任意的NSObject上工作,因为NSObject不是(必然)一组键/值对或列表。为了做到这一点,我会建议迭代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]; 
相关问题