无法动态地将 JSON 值括在引号中 Swift

Unable to enclose JSON values in quotes dynamically Swift

提问人:Ryan H 提问时间:10/20/2023 最后编辑:Ryan H 更新时间:10/20/2023 访问量:25

问:

我在 Swift 的 JSON 字符串中用引号将变量值封闭在键中非常困难。 我有一个键,里面有一两个值,这取决于一些不相关的逻辑。如果我对 JSON 字符串中的值进行硬编码,如下所示;

let jsonMessage: [String: Any] = [
...
"options": [
"Option1", "Option2"
]
...

一切正常,这就是我需要的方式。问题在于,有时我只需要使用一个或另一个值,而不是同时使用这两个值,所以我需要构建值。(甚至是整个键值对)

我以为我可以通过做这样的事情来做到这一点:

let option1var = "Option1"
let option2var = "Option2"
"options": [
"\"\(option1var)\"","\"\(option2var)\""
]

但这并不能转义反斜杠转义字符和输出为;

"options": [
"\Option1\","\"Option2\"
]

如果我尝试不使用转义字符,但不能,因为逗号会破坏字符串,则输出如下;

"options": [
option1var,option2var  //String breaks at comma
]

这不好,因为我需要用引号括起来的值

我还尝试将键创建为相同类型的 Dictionary [String: Any] 并像这样插入整个值;

options = ["options": "\"Option1\",\"Option2\""]

但后来它告诉我它正在寻找一个字符串值而不是字典值。

我尝试了许多其他变体,但由于引号的原因,我要么无法将整个值括在字符串中,要么如果我使用转义字符,它们只会出现在字符串中。

我担心我只是看不到树木的森林,并且错过了一些明显的东西,但我就是无法弄清楚它是什么,任何帮助将不胜感激。

又尝试了一次失败的尝试,如下所示;

options = option1var + "," + option2var

出来了;

"options": "Option1,Option2"  //Need entries separated and enclosed
JSON 斯威夫特

评论

1赞 Sweeper 10/20/2023
只需用 Swift 编写即可。也就是说,您可能应该改用。"options": [option1var, option2var]Codable
0赞 Ryan H 10/20/2023
@Sweeper 当然,我没有尝试过......这种特殊情况有一个 JSON 字符串,除了这个键之外,大部分是硬编码值,还有一个,这就是我使用字符串而不是可编码的原因,但我很欣赏这个建议。您的建议非常有效。非常感谢。

答:

1赞 Sweeper 10/20/2023 #1

您需要一个包含两个字符串的 JSON 数组,“Option1” 和 “Option2”,因此自然而然地,您应该创建一个包含这两个字符串的 Swift 数组,它们存储在 和 中。那是:option1varoption2var

[option1var, option2var]

请注意,引号不是要编码的字符串的一部分。在 JSON 中看到它们只是因为它们是 JSON 语法的一部分。JSON 编码器将负责添加这些引号。你不应该在你的Swift代码中添加它们,即这是不正确的:

["\"\(option1var)\"","\"\(option2var)\""]

这是一个包含以引号开头和结尾的字符串的数组。