如何在目标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 的对象。这意味着:

***对象必须是NSArrayNSDictionary 包含的对象必须是 NSStringNSNumberNSArrayNSDictionaryNSNull 的实例。 字典键必须是NSStrings 数字不能是无限的或NaN

您需要转换为字典或数组表示才能使用此方法。

【讨论】:

以上是关于如何在目标c中将类对象转换为json字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在PHP中将对象转换为特定格式的数组

如何在 Python 中将类对象转换为 JSON

如何在pyspark中将JSON字符串转换为JSON对象

如何在 Spring Boot 中将输入字符串转换为 json 字符串或 json 对象

如何在 C# 中将 .json 文件转换为字符串 [重复]

如何在 Flutter 中将 JSON 转换为对象? [关闭]