2011-05-27 50 views
0

我想發佈一個json對象到請求。但JSONWriter似乎沒有我的對象轉換,不知道我做錯了什麼...... 這裏是我的轉換代碼..iphone,SBJsonWriter ..轉換對象

customer = [[Customer alloc] init]; 

Address *tempAddr = [[Address alloc] init]; 
tempAddr.Line1=strAddr1 ; 
tempAddr.Zip =strPost; 
tempAddr.City =strStreet; 
[customer setInvoiceAddress:tempAddr]; 

customer.FirstName=strFirstName; 
customer.LastName=strLastName; 
customer.CellPhone=strCellPhone; 
customer.Phone=strPhone; 
customer.Email=strEmail; 

SBJsonWriter *writer = [SBJsonWriter alloc]; 
NSString *jsonConvertedObj = [writer stringWithObject:customer]; 
NSLog(@"the json converted object ... %@", jsonConvertedObj); 

請幫助。我不知道上面的代碼有什麼問題。

回答

0

AFAIK SBJSONWriter僅支持將字典和數組轉換爲JSON字符串。它不適用於任意對象。


編輯:這是相應的執行,它返回零,如果所提供的對象既不是字典也不陣列。

- (NSString*)stringWithObject:(id)value { 
    if ([value isKindOfClass:[NSDictionary class]] || [value isKindOfClass:[NSArray class]]) { 
     return [self stringWithFragment:value]; 
    } 

    [self clearErrorTrace]; 
    [self addErrorWithCode:EFRAGMENT description:@"Not valid type for JSON"]; 
    return nil; 
} 
+0

感謝,所以我應該使用字典對象,而不是武斷的或有另一種方式來得到這個工作??? – donito 2011-05-27 13:03:52

+0

@donito是的,我認爲使用字典存儲您的數據將是最簡單的方法。或者,您可以從客戶讀取要轉換爲JSON的數據,並將對象地址轉換爲中間字典,然後從中生成JSON表示。這樣你就不需要放棄你的自定義類。 – hennes 2011-05-27 13:46:40

+0

謝謝,但我已經將代碼轉換爲使用字典對象。它工作正常。謝謝您的幫助。 – donito 2011-05-27 13:55:55

2

弄清楚爲什麼你的JSON解析失敗,您768,16使用這種方法:

NSError *error = nil; 
    NSString * jsonTest = [[[SBJsonWriter alloc] init] stringWithObject:jsonTestDictionary error:&error]; 

    if (! jsonTest) { 
     NSLog(@"Error: %@", error); 
    }else{ 
     NSLog(@"%@", jsonTest); 
    } 

下面是一個簡單的代碼演示如何使用它:

#import <Foundation/Foundation.h> 

#import "SBJsonWriter.h" 
#import "SBJsonParser.h" 


int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 

     NSDictionary* aNestedObject = [NSDictionary dictionaryWithObjectsAndKeys: 
               @"nestedStringValue", @"aStringInNestedObject", 
               [NSNumber numberWithInt:1], @"aNumberInNestedObject", 
             nil]; 

     NSArray * aJSonArray = [[NSArray alloc] initWithObjects: @"arrayItem1", @"arrayItem2", @"arrayItem3", nil]; 

     NSDictionary * jsonTestDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
              @"stringValue", @"aString", 
              [NSNumber numberWithInt:1], @"aNumber", 
              [NSNumber numberWithFloat:1.2345f], @"aFloat", 
              [[NSDate date] description], @"aDate", 
              aNestedObject, @"nestedObject", 
              aJSonArray, @"aJSonArray", 
              nil]; 

     // create JSON output from dictionary 

     NSError *error = nil; 
     NSString * jsonTest = [[[SBJsonWriter alloc] init] stringWithObject:jsonTestDictionary error:&error]; 

     if (! jsonTest) { 
      NSLog(@"Error: %@", error); 
     }else{ 
      NSLog(@"%@", jsonTest); 
     } 
    } 
    return 0; 
} 

輸出

{ 
    "aDate":"2012-09-12 07:39:00 +0000", 
    "aFloat":1.2345000505447388, 
    "nestedObject":{ 
     "aStringInNestedObject":"nestedStringValue", 
     "aNumberInNestedObject":1 
    }, 
    "aJSonList":["arrayItem1","arrayItem2","arrayItem3"], 
    "aString":"stringValue", 
    "aNumber":1 
} 

說明:

  1. 使用「錯誤」讓我弄清楚,如果你寫[NSDate的 日期]而不是[NSDate的日期]描述]你會得到「不支持 __NSTaggedDate JSON序列化 」錯誤。
  2. 通知浮舍入誤差... 1.2345成爲1.2345000505447388