首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >复杂字典获得条件为字符串的值

复杂字典获得条件为字符串的值
EN

Stack Overflow用户
提问于 2022-08-21 10:02:27
回答 1查看 46关注 0票数 1

我已经使用laanlabs/SwiftSurvey调查构建了一项调查,并且我能够作为字典从surveyComplete方法中获得结果。

结果以一个复杂的结构返回,我需要通过questions数组-> question对象的键->来获取每个响应的值。这个对象包含一个choices数组,在每个选择对象中都有一个selected键。如果所选键的值为true (1),则需要获取位于同一对象中的text键的值。其中一些选项将有多个selected键,值为true (1),如果是这样的话,我希望在值之间用逗号连接text键值。

然后将密钥插入到SQLite数据库中。

我刚开始对字典进行解码并以正确的方式遍历它们,我可以访问字典print(dictionary),也可以进入正确的NSArray - print(dictionary["questions"],但是从那里我很困惑,有人能告诉我怎么做吗?

结果如下,不幸的是,这是一个很大的块道歉。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
    "version": 001, 
    "metadata": 
    {
        "app_version" = "1.1";
        build = 22;
        debug = true;
    }, 
    "questions": <__NSArrayI 0x600000614d20>(
        {
            question =     {
                allowsMultipleSelection = 0;
                choices =         (
                                {
                        allowsCustomTextEntry = 0;
                        selected = 1;
                        text = Physician;
                        uuid = "224E1B76-D220-4068-AA22-6861E5F836CB";
                    },
                                {
                        allowsCustomTextEntry = 0;
                        selected = 0;
                        text = Dietitian;
                        uuid = "2DB2B6FB-E344-4BBF-A551-2FABE0DFF6AA";
                    },
                                {
                        allowsCustomTextEntry = 0;
                        selected = 0;
                        text = "Genetic Counsellor";
                        uuid = "A9BE7093-B95C-4BF4-B629-12FDA3154ABE";
                    },
                                {
                        allowsCustomTextEntry = 0;
                        selected = 0;
                        text = "Nurse/Nurse Practitioner/Physician Assistant";
                        uuid = "8E75A41B-0D8C-4ADA-A31C-2BC408F8269D";
                    },
                                {
                        allowsCustomTextEntry = 0;
                        selected = 0;
                        text = "Pharmacist / Pharmaceutical Industry";
                        uuid = "C943430D-EA48-4BCB-8ADF-011A223BDF36";
                    },
                                {
                        allowsCustomTextEntry = 0;
                        selected = 0;
                        text = "Academic/Researcher";
                        uuid = "E28377A4-37FC-4351-A857-88383A3D5A3B";
                    },
                                {
                        allowsCustomTextEntry = 0;
                        selected = 0;
                        text = "Patient/Patient Advocacy Group";
                        uuid = "E5836187-6C08-4272-A88E-40578F4FCF44";
                    },
                                {
                        allowsCustomTextEntry = 1;
                        selected = 0;
                        text = "Other (please specify)";
                        uuid = "EFF22342-48A9-4B8E-81A0-BB44D0E86EBC";
                    }
                );
                required = 1;
                tag = "hcp-specialty";
                title = "Please select the option that best describes your specialty:";
                uuid = "7F77E248-8429-463E-9291-241B94BEE4F8";
            };
            type = 0;
        },
        {
            question =     {
                autoAdvanceOnChoice = 1;
                choices =         (
                                {
                        allowsCustomTextEntry = 0;
                        selected = 1;
                        text = Yes;
                        uuid = "3C7A330D-F16B-4F3E-8ABC-6767A1A6332A";
                    },
                                {
                        allowsCustomTextEntry = 0;
                        selected = 0;
                        text = No;
                        uuid = "0E4F5360-FCCD-4860-9971-86E23BB8F6C1";
                    }
                );
                required = 1;
                tag = "newborn-screening";
                title = "Is newborn screening for classical homocystinuria available in your region/country?";
                uuid = "F7C1A9D5-43AB-420D-80CF-F6644B95C73E";
            };
            type = 1;
        },
        {
            question =     {
                feedback = "This is a free text response";
                required = 1;
                tag = "biggest-unmet-need";
                title = "What do you believe is the biggest unmet need for patients living with classical HCU?";
                uuid = "133E2EDC-8FF4-48D1-8BFA-3A20E5DA0052";
            };
            type = 4;
        }
    )
]
EN

回答 1

Stack Overflow用户

发布于 2022-08-21 11:06:42

根据他们的结果示例,您将得到JSON。当然,将JSON转换为Dictionary是最简单的,但也是最脏的。你基本上是得到“任何”,所以当是时候使用数据,你必须做很多-如你所说-“解码”,验证,等等。

相反,创建一些与您的响应相匹配的Decodable结构。在这种情况下,只需要3种结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Survey: Codable {
    let questions: [Question]
}

struct Question: Codable {
    let allowsMultipleSelection: Int?
    let choices: [Choice]?
    let required: Int
    let tag: String
    let title: String
    let uuid: String
    let feedback: String?
}

struct Choice: Codable {
    let allowsCustomTextEntry: Int
    let selected: Int
    let text: String
    let uuid: String
}

(我没有核实每个字段,你可以根据需要进行调整。你可以省略任何你不需要/不关心的属性。)

然后你像这样解码它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Assume jsonData is your original JSON, which you currently decode as dictionary. So instead you do this:

let decoder = JSONDecoder()
let product = try decoder.decode(Survey.self, from: jsonData)

这种方法允许您

  1. 最重要的是,拥有定义良好的数据使使用数据库更容易。您甚至可以基于可编码结构实现数据库编码器,这意味着您不需要手动遍历数据库的列。也是什么时候。从数据库中读取,您可以得到相同的结构,不需要为您解码的数据库和字典设置2组规则/验证。
  2. 这还允许您对解码的数据有信心:它有正确的名称和类型。您不需要验证它(它是在解码时为您验证的)。您控制需要哪些属性,哪些默认设置,以此类推。在更复杂的情况下,您可能需要将手动解码添加到您的结构中,但是即使这样,手动解码也在结构本身内,很容易更改/使用/测试。所有这一切,而不是庞大混乱的字典,其中有“一些东西”。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73437018

复制
相关文章
【说站】python如何防止栈溢出
以上就是python防止栈溢出的方法,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/23
4740
汇编语言下--如何防止除法溢出
DIV mem/reg16 ; DX余数,AX商← DX:AX / mem/reg8
书童小二
2018/09/03
1.3K0
汇编语言下--如何防止除法溢出
如何防止softmax函数上溢出(overflow)和下溢出(underflow)
《Deep Learning》(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(overflow)和下溢出(underflow)对数值计算的影响,并以softmax函数和log softmax函数为例进行了讲解。这里我再详细地把它总结一下。 『1』什么是下溢出(underflow)和上溢出(overflow) 实数在计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这就是下溢出。此时如果对这个数
zenRRan
2018/04/10
2.2K0
如何防止softmax函数上溢出(overflow)和下溢出(underflow)
oracle如何防止锁表,Oracle-怎么防止oracle锁表[通俗易懂]
解决这种情况最好的方法就是在列上绑定一个序列,如果没有这么做,你也可以创建一个before触发器在插入前捕获resource_busy异常来防止阻塞:
全栈程序员站长
2022/08/27
9030
android防止内存溢出浅析
Android的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M。但是Android采用的是Java语言编写,所以在很大程度上,Android的内存机制等同于Java的内存机制,在刚开始开发的时候,内存的限制问题会给我们带来内存溢出等严重问题。在我们不使用一些内存的时候,我们要尽量在Android或者其他平台上避免在运行其他程序时,保存必要的状态,使得一些死进程所带来的内存问题,应该尽量在关闭程序或者保存状态的时候释放掉,这样能提高系统在运行方面的流畅性。 Android的内存主要表现在: 1.
欢醉
2018/01/22
6830
CSS基础——css 元素溢出
当子元素(标签)的尺寸超过父元素(标签)的尺寸时,此时需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来完成。
落雨
2022/07/20
2.5K0
css元素溢出 overflow
当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置。
Devops海洋的渔夫
2019/05/31
3.5K0
【android开发】Android防止内存溢出浅析
近期项目做得差点儿相同了,測试出现了一些问题,当中一个就是内存溢出问题,在三星手机上測试最easy出现内存溢出,在其它手机上,比方华为就没有发生,也是比較郁闷。这个问题在之前的公司,做项目时也遇到过,非常大一方面是自己写的代码问题,今天在网上找了一些知识,给大家分享一下:
全栈程序员站长
2022/07/09
5280
【说站】python防止栈溢出的解决
以上就是python防止栈溢出的方法,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/23
4230
前端基础-CSS内容溢出
取值:auto当内容溢出时,生成滚动条------默认,hidden内容溢出时超出部分隐藏
cwl_java
2020/04/07
5900
前端基础-CSS内容溢出
网站安全该如何理解? 简单讲就是防止恶意攻击
作为一名网络安全工程师,“网站安全”这个词似乎离生活有些遥远,平日里很多人开启计算机最多就是登陆网站、浏览网站,至于网站安不安全,却从未关注过。近些年来,网络安全相关话题已经引起了社会的广泛关注,还记得去年暑期大火的偶像连续剧《亲爱的热爱的》讲述了男主希望为中国拿下CTF大赛冠军的梦想之路,CTF在网络安全领域中指的是网络安全技术人员之间进行技术比拼的一种比赛形式,当然,这部剧的成功之处更在于让许多年轻人对网络安全领域产生了兴趣,笔就是其中一员。本文旨在从一名网络安全工程师的角度,用更加通俗易懂的话语,介绍网站安全的相关知识。
网站安全专家
2020/02/18
9030
网站安全该如何理解? 简单讲就是防止恶意攻击
微信小程序防止重复点击,该如何处理?
当用户点击按钮或控件时,如果响应比较慢,往往会重复点击,另外也会存在用户故意反复快速点击的情况,这种时候就会多次触发点击事件造成非期望的结果。如何解决或避免这个问题呢?一般来说有两种情况。 1、点击事件是执行请求 这种情况下可以在请求执行之前显示一个模式的加载框,请求完成后再关闭加载框,由于小程序在1.1.0版本基础库才支持wx.showLoading,因此需要对低版本做兼容处理,代码如下: function showLoading(message) { if (wx.showLoading) {
连胜
2018/03/07
3.7K0
Java SQL注入危害这么大,该如何来防止呢?
直接使用 JDBC 的场景,如果代码中存在拼接 SQL 语句,那么很有可能会产生注入,如
搜云库技术团队
2019/10/18
1.2K0
技术分享 | 误删表以及表中数据,该如何恢复?
数据库误删某表恢复方法,下面介绍的的方法是针对每天有备份的数据库和开启 binlog 日志的。
爱可生开源社区
2022/07/26
8470
技术分享 | 误删表以及表中数据,该如何恢复?
爱可生数据库工程师,负责 MySQL 日常维护及 DMP 产品支持。擅长mysql故障处理。
爱可生开源社区
2022/09/26
6010
技术分享 | 误删表以及表中数据,该如何恢复?
有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
《Deep Learning》(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(overflow)和下溢出(underflow)对数值计算的影响,并以softmax函数和log softmax函数为例进行了讲解。这里我再详细地把它总结一下。 『1』什么是下溢出(underflow)和上溢出(overflow)   实数在计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这就是下溢出。此时如果
10JQKA
2018/07/05
1.4K0
有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
《Deep Learning》(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(overflow)和下溢出(underflow)对数值计算的影响,并以softmax函数和log softmax函数为例进行了讲解。这里我再详细地把它总结一下。 『1』什么是下溢出(underflow)和上溢出(overflow)   实数在计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这就是下溢出。此时如果
10JQKA
2018/05/09
2.8K0
有效防止softmax计算时上溢出(overflow)和下溢出(underflow)的方法
C++核心准则ES.103​:防止溢出​
Overflow usually makes your numeric algorithm meaningless. Incrementing a value beyond a maximum value can lead to memory corruption and undefined behavior.
面向对象思考
2020/06/17
3670
网站被黑客篡改了数据 该如何防止网站被攻击
在众多网站上线后出现的安全漏洞问题非常明显,作为网站安全公司的主管我想给大家分享下在日常网站维护中碰到的一些防护黑客攻击的建议,希望大家的网站都能正常稳定运行免遭黑客攻击。
技术分享达人
2020/03/26
1.8K0
网站被黑客篡改了数据 该如何防止网站被攻击
点击加载更多

相似问题

苹果正在弃用UIPopover吗?

12

Ionic Google Analytics插件正在弃用吗?

132

应该弃用Vector吗?

40

@已弃用vs @已弃用

21

由于已弃用,正在替换self->isa

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文