附加到 JSON 字典

Posted

技术标签:

【中文标题】附加到 JSON 字典【英文标题】:Appending to a dictionary of JSON 【发布时间】:2015-08-19 11:46:30 【问题描述】:

我希望在将我的项目从 Swift 1.2 转换为 Swift 2.0 时,有人能够帮助我找出我的代码到底做错了什么。

我正在尝试下载和解析 JSON 数据(使用 SwiftJSON 的更新分支),但继续收到错误 Cannot invoke initializer for type 'Minion' with an argument list of type '(minionDetails: Element) '

似乎我能够成功转换我的其余代码,但这条线阻碍了我构建项目。

Minion.swift

import Foundation
import UIKit

class Minion : NSObject, NSCoding 

var name: String?
var age: String?

class func fetchMinionData() -> [Minion] 

    var myURL = "http://myurl/test.json"

    let dataURL = NSURL(string: myURL)

    var dataError: NSError?

    let data: NSData?
    do 
        data = try NSData(contentsOfURL: dataURL!, options: NSDataReadingOptions.DataReadingMappedIfSafe)
     catch let error as NSError 
        dataError = error
        data = nil
    

    let minionJSON = JSON(data!)
    var minions = [Minion]()

    for minionDictionary in minionJSON 
        minions.append(Minion(minionDetails: minionDictionary))
    //THIS LINE GIVES THE ERROR
    
    return minions


init(minionDetails: JSON) 

    name = minionDetails["san"].string
    age = minionDetails["age"].string


required init?(coder aDecoder: NSCoder) 
    name = aDecoder.decodeObjectForKey("name") as? String
    age = aDecoder.decodeObjectForKey("age")as? String


func encodeWithCoder(aCoder: NSCoder) 
    aCoder.encodeObject(name, forKey: "name")
    aCoder.encodeObject(age, forKey: "age")
  

我认为我附加了一些错误,但我似乎无法解决这个问题。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您名为minionJSON 的SwiftyJSON 对象实际上是一个字典,因此您必须在每次迭代中使用键的值而不是整个对象。在我们的示例中,我们不需要密钥,因此我将其替换为 _ 占位符。

for (_ , minionDictionary) in minionJSON 
    minions.append(Minion(minionDetails: minionDictionary))

【讨论】:

啊,明白了!非常感谢!效果很好!

以上是关于附加到 JSON 字典的主要内容,如果未能解决你的问题,请参考以下文章

如何将字典附加到熊猫数据框?

Python JSON转储/附加到.txt,每个变量都在新行

从列表的字典中提取列表,然后附加到数据框

我想更新字典/json 键而不是附加一个新键?

高效地将数百万个 JSON 文件附加到单个文件中

附加 JSON 数据 Swift