2014-02-12 103 views
1

1.I創建類對象,然後用這個代碼如何類對象轉換成JSON字符串的目標C

csJastorPollQuestion *pq = [[csJastorPollQuestion alloc] initWithID:@"01" Name:@"AAA"]; 

2.I顯示「csJastorPollQuestion」中的NSLog它的存在價值上我的課

#<csJastorPollQuestion: id = (null) { ID = 01; Name = AAA; }> 

3.I轉換 「csJastorPollQuestion」 以JSON字符串與此代碼

NSData *jsd = [NSJSONSerialization dataWithJSONObject:pq options:NSJSONWritingPrettyPrinted error:&er]; 
NSString *jsonString = [[NSString alloc] initWithData:jsd encoding:NSUTF8StringEncoding]; 

4.當我跑我的親ject它顯示錯誤此

[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write' 

5.什麼是將「csJastorPollQuestion」轉換爲json字符串的正確方法?

+0

將其粘貼在字典中。 JSON要求頂級對象是字典或數組。 – CodaFi

+0

我想要一些例子,你可以提供給我嗎? – user2955394

回答

1

dataWithJSONObject:options:error:方法僅適用於該NSJSONSerialization知道如何轉換成JSON對象。這意味着:

  • 頂層對象必須是包含必須的NSStringNSNumberNSArrayNSDictionary,或者NSNull實例的NSArrayNSDictionary
  • 對象。
  • 字典密鑰必須爲NSString s
  • 數字不得爲無限或NaN

您需要轉換爲字典或數組表示才能使用此方法。

2

我認爲你應該反映你自己的對象NSDictionary和使用NSJSONSerialization轉換爲JSON字符串。

從屬性反映:

- (NSDictionary *)dictionaryReflectFromAttributes 
    { 
     @autoreleasepool 
     { 
      NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
      unsigned int count = 0; 
      objc_property_t *attributes = class_copyPropertyList([self class], &count); 
      objc_property_t property; 
      NSString *key, *value; 

      for (int i = 0; i < count; i++) 
      { 
       property = attributes[i]; 
       key = [NSString stringWithUTF8String:property_getName(property)]; 
       value = [self valueForKey:key]; 
       [dict setObject:(value ? value : @"") forKey:key]; 
      } 

      free(attributes); 
      attributes = nil; 

      return dict; 
     } 
    } 

轉換爲JSON字符串:

- (NSString *)JSONString 
    { 
     NSDictionary *dict = [self dictionaryReflectFromAttributes]; 
     NSError *error; 
     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; 
     if (jsonData.length > 0 && !error) 
     { 
      NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
      return jsonString; 
     } 
     return nil; 
    }