This问题不能解决我的问题。
我的目标是打印出一个 JSON 有效格式的字典,但我想通过 for 循环将项目添加到这个字典中。生成的 JSON 文件应如下所示:
"{
"items": [{
"name":"An Item"
},{
"name":"Item 2"
}]
}"
以下代码部分有效。
func buildItem(name: String) -> [String:Any] {
let action : [String: Any] = [
"name": name
]
return action
}
var items : [String: Any] = [:]
for filename in filelist {
items[filename] = buildItem(name: filename)
}
print (items)
如果该目录有一个名为 test.md 的文件,则上面的返回:
["test.md": ["name": "test.md"]]
但是我希望它返回:
["items": ["name": "test.md"], ["name": "file2.md"]]
这样我就可以转换成有效的 JSON。
- 如何将 buildItem 返回的条目添加到
items
中?
完整的代码可以在这个 pastebin 中找到.
最佳答案
所以问题在于您将 buildItem
的结果作为不同键的值添加到字典中,而不是将它们作为 items
的值附加到数组中键。
基本上,您想要的是 items["items"] = [array of buildItem results]
。
因此,您需要将 for 循环替换为
var items : [String: Any] = [:]
items["items"] = filelist.map { buildItem(name: $0) }
然后将字典序列化为数据并将其转换为字符串你可以简单地使用这个简单的扩展来扩展带有字符串键的字典
extension Dictionary where Key == String {
func toPrettyJSON() throws -> String {
let jsonData = try JSONSerialization.data(withJSONObject: self,
options: [.prettyPrinted])
guard let jsonStr = String(data: jsonData, encoding: .ascii)
else { throw NSError.init() }
return jsonStr
}
}
然后打印你的JSON
if let jsonStr = try? items.toPrettyJSON() {
print(jsonStr)
}
here是整个代码
关于swift - 将项目附加到字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498336/