如何在目标c中将类对象转换为json字符串
Posted
技术标签:
【中文标题】如何在目标c中将类对象转换为json字符串【英文标题】:How to convert class object to json string in objective c 【发布时间】:2014-02-12 03:15:21 【问题描述】:1.我创建类对象,然后使用此代码为我的类添加价值
csJastorPollQuestion *pq = [[csJastorPollQuestion alloc] initWithID:@"01" Name:@"AAA"];
2.我在 NSLog 中显示“csJastorPollQuestion”它存在
#<csJastorPollQuestion: id = (null) ID = 01; Name = AAA; >
3.我用这段代码将“csJastorPollQuestion”转换为json字符串
NSData *jsd = [NSJSONSerialization dataWithJSONObject:pq options:NSJSONWritingPrettyPrinted error:&er];
NSString *jsonString = [[NSString alloc] initWithData:jsd encoding:NSUTF8StringEncoding];
4.当我运行我的项目时,它会显示错误
[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write'
5.将“csJastorPollQuestion”转换为json字符串的正确方法是什么?
【问题讨论】:
把它粘在字典里。 JSON 要求***对象是字典或数组。 我想要一些例子,你能提供给我吗? 【参考方案1】:我认为您应该将自己的对象反映到 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;
【讨论】:
【参考方案2】:dataWithJSONObject:options:error:
方法仅适用于 NSJSONSerialization
知道如何转换为 JSON 的对象。这意味着:
NSArray
或NSDictionary
包含的对象必须是 NSString
、NSNumber
、NSArray
、NSDictionary
或 NSNull
的实例。
字典键必须是NSString
s
数字不能是无限的或NaN
。
您需要转换为字典或数组表示才能使用此方法。
【讨论】:
以上是关于如何在目标c中将类对象转换为json字符串的主要内容,如果未能解决你的问题,请参考以下文章