如何在 Objective C 中将类对象转换为 json 字符串

2023-12-25

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字符串的正确方法是什么?


我认为你应该将你自己的对象反映到 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;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Objective C 中将类对象转换为 json 字符串 的相关文章

随机推荐

  • Android 中的错误 -- 无法找到以下项的检测信息:ComponentInfo

    例如 我有一个应用程序将调用联系人并且必须选择其中一个联系人 但它并没有完全按照我想要的方式做 它向我显示错误Unable to find instrumentation info for ComponentInfo com sample
  • QSplitter 在 QWidget 和 QTabWidget 之间变得无法区分

    我将 QWidget 和 QTabWidget 放在一个水平拆分器中并排放置 并且分离器失去了形状 只有将鼠标悬停在分离器上才能知道有分离器 如何让它可见 Thanks 由于 QSplitterHandle 大多数人认为是 分割器 是从 Q
  • VS 2010 Tools 的 gacutil.exe 在哪里安装程序集?

    我使用 Visual Studio 2010 命令提示符的 gacutil exe 来安装程序集 我希望将程序集添加到C WINDOWS assemblies 但它被添加到C WINDOWS Microsoft NET assembly G
  • 如何在 IntelliJ 中运行同一个应用程序两次?

    我正在使用 IntelliJ 开发我的客户端 服务器应用程序 并且刚刚发现了Compounds 基本上我可以同时运行我的客户端和服务器 并且每次我想测试时它都可以节省我无用的操作 但是 我想用 2 个客户端和 1 个服务器来测试我的应用程序
  • Java 2D:将点 P 移动到靠近另一个点一定距离?

    将 Point2D Double x 距离移近另一个 Point2D Double 的最佳方法是什么 编辑 尝试编辑 但因维护而停机 不 这不是作业 我需要将飞机 A 移向跑道末端 C 并将其指向正确的方向 角度 a 替代文本http im
  • 兑换 + 点击一次 = :-(

    我有一个普通的 Windows 窗体程序 不是 VSTO 它使用单击一次进行部署 问题是 很多用户都遇到随机错误的问题 通常会指出 由于以下错误 IClassFactory 失败 80004005 我通过将模式更改为 隔离 来部署救赎 这似
  • 以百分比形式给出省略号

    我正在尝试省略span里面的元素td元素 问题是省略号有效当且仅当我给出span元素具有固定宽度 即宽度 以像素为单位 但在我的项目中 我不能使用固定宽度span元素 这span元素必须完全拉伸到各自的内部td可以通过使用的元素width
  • Unix - 在 shell 脚本中排序

    如何根据字段位置对文件进行排序 例如 我需要对下面给定的文件进行排序 基于第 4 5 和 8 名位置 请帮忙 我尝试了以下命令 它不起作用 sort d k 3 42 44 k 4 47 57 k 5 59 70 k 8 73 82 010
  • 如何从外部功能镜头转向功能镜头

    在我开始更好地使用函数式编程的过程中 在 SO 家族成员的帮助下 我发现了什么lens https bartoszmilewski com category lens 我什至通过下面的链接对其进行了一些研究 以了解有关它们的更多信息 htt
  • 如何与剧作家一起下载?

    我正在尝试使用以下命令从网站下载文件剧作家 https github com microsoft playwright 触发下载的按钮做了一些js 然后开始下载 使用单击按钮 click函数触发下载但显示错误 失败 下载错误 我尝试过使用
  • 我可以在 Mono CSharpRepl 中重新加载程序集吗?

    因此 我有 Python 背景 现在开始在 Mac 上使用 C 和 Mono 我最近才发现Mono CSharpRepl 工具 http www mono project com CsharpRepl并希望使用它来实现与 Python 中类
  • Java中的互斥方法执行

    我有两种方法 a and b 虽然我可以接受多个线程同时访问任何方法 这是可取的 但我不希望任何线程进入a while b 正在被执行 我怎么做 Edit 1 假设有 4 个线程Thread 1正在访问A 我想要的是所有 4 个线程都不应该
  • Angular REST API 安全性

    当我使用 Angular 消费 REST API 请求时 我的应用程序出现问题 Web 服务 URL 存储在 Angular 服务或控制器 js 文件中 因此 如果我有登录网络服务来检查用户名和密码 例如 最终用户或开发人员可以获取此网址并
  • 测试未通过:未定义方法“验证!”对于 nil:NilClass?

    我有以下失败 Failures 1 RelationshipsController creating a relationship with Ajax should increment the Relationship count Fail
  • 页面重新加载后记住 jQuery 选项卡位置

    我有一个包含一些 GridView 的页面 我使用选项卡菜单将它们保存在选项卡中 有四个选项卡 我的问题是 当页面重新加载时 选项卡会重置为第一个选项卡 HTML div class tabbed box nbsp nbsp div cla
  • 嵌入 hsql 的一些有趣的事情

    我只是对某些事情感到好奇 我在我的项目中使用 hsql 当然是嵌入式的 有时我觉得需要可视化 hibernate 生成的内容 我拿了一份 dbvisualizer 的免费副本 这是 hsqljdbc properties jdbc url
  • 如何为 postgres 编写 DELETE CASCADE?

    我正在为 postgres 手动构建 DELETE CASCADE 语句 我有一个 交易 和一个 切片 表 相关关系如下所示 Table public slice Column Type Modifiers id text not null
  • 如何在 Hadoop mapReduce 中获取 Kerberos 而不是委托令牌?

    我是一名 Java 用户 当向 Hadoop mapReduce 提交作业时 它使用 Kerberos 对 Hadoop 进行身份验证 成功后会创建委派令牌 并将其与作业提交一起传递给 Hadoop 而不是 kerberos 票证 出于安全
  • 当 SQL 查询受限时与调用整行相比,性能有何优势?

    通过在查询中仅选择所需字段而不是查询整行 可以带来多少性能优势 例如 如果我有一行 10 个字段 但只需要显示 5 个字段 是否值得只查询这 5 个字段 此限制带来的性能优势与稍后需要返回并在 sql 查询中添加字段的风险相比有何不同 您需
  • 如何在 Objective C 中将类对象转换为 json 字符串

    1 我创建类对象 然后使用此代码为我的类添加值 csJastorPollQuestion pq csJastorPollQuestion alloc initWithID 01 Name AAA 2 我在 NSLog 中显示了 csJast