【问题标题】:Create specific Json in Swift 4在 Swift 4 中创建特定的 Json
【发布时间】:2018-05-14 11:33:32
【问题描述】:

我必须向网络服务器提供一些特定的 JSON,但我对如何使用正确的数组和字典感到非常困惑,所以我无法得到最终结果。我从这个开始:

["entries": [
              "member" : [
                          "id" : key,
                          "name" : value
                          ],
              "timestamp" : "\(dateString)"
              ]
]

在我必须发送到服务器的 JSON 文件中,我只能有 1 个“条目”和几个具有特定“id”和“名称”以及时间戳的“成员”。我知道我必须使用字典,但无法得到这个结果。这是我迄今为止尝试过的:

var leden = [Int: String]()
var jsonDict = [String: Any]()
var dateString = Date()

for (key, value) in leden{

        jsonDict["\(key)"] = ["member" : [
                                          "id" : key,
                                          "naam" : value
                                          ],
                              "timestamp" : "\(dateString)"
                             ]
    }
    jsonFinaal = ["entries": jsonDict]

这是我所能得到的最接近的,但足够好,因为 jsonDict 中的键不应该在那里,我在第二个字典中添加了“条目”以使其成为唯一条目。

谁能更好地帮助我解决问题?

【问题讨论】:

  • Swift4 使用Encodable 协议使其变得更加容易。您可以将数据建模为结构,声明 Encodable 一致性并设置 CodingKeys 枚举以匹配目标 Web 服务器使用的大小写。之后,您应该准备好使用 JSONEncoder().encode(encodable) - 它为您提供数据,然后您可以将其添加到 URLRequesthttpBody 属性中。

标签: ios json swift dictionary swift4


【解决方案1】:

members 的值是字典的数组,而不是字典

这将创建按id 键排序的结构

let leden = [1 : "Foo", 2: "Bar"]
let sortedKeys = leden.keys.sorted()
let dateString = Date()

var members = [[String:Any]]()
for key in sortedKeys {
    let naam = leden[key]!
    members.append(["member" : ["id" : key, "naam" : naam], "timestamp" : "\(dateString)"])
}
let entries = ["entries": members]

print(entries)

和带有

的 JSON 字符串
do {
    let jsonData = try JSONSerialization.data(withJSONObject: entries)
    let json = String(data: jsonData, encoding: .utf8)
    print(json)
} catch { print(error) }

【讨论】:

  • 嗨 Vadian,我认为这是正确的格式,我只是将您的解决方案复制/粘贴到一个新的游乐场,它看起来非常好!接下来我将它复制到我的项目中,我不确定“leden.keys.sorted”的原因,但我会在 Swift 文档中寻找答案:-) 问候,Patrick
  • 获取排序数组只是为了方便,因为leden 字典是无序的。你也可以使用你的语法for (key, value) in leden { members.append(["member" : ["id" : key, "naam" : value], ...,但是你会得到一个随机的顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多