将可选元素附加到Swift中的json数组中

时间:2017-12-30 01:14:57

标签: json swift

我刚开始熟悉JSON。我有一个类对象,我通过传入JSON初始化。这个对象有一个可能为空的数组,我需要检查它的值。到目前为止我正在尝试:

    init(json: JSON) {
    id = json["id"].string
    type = json["type"].string
    text = json["text"].string
    answer = json["answer"].string
    format = json["format"].string
    answeredBy = []

    if let answeredByjson = json["answeredBy"].array {
        for (_, userDict) in answeredByjson {
           if let userDict = userDict as? [String : Any] {
                answeredBy.append(JSON(User(dictionary: userDict)))
            }
        }
    }
}

数组中的元素是必须用于初始化另一个对象(用户)的字典。 我得到的错误是:

  

表达式类型'[JSON]'在没有更多上下文的情况下是不明确的。

如何更新我的代码?

这是我的json:

    {        
    "answer" : "rachel",
      "answeredBy" : {
       "j1K4WXbOFRXfm3srk9oMtZJ8Iop2" : {
          "email" : "an email",
          "pictureURL" : "a URL",
          "uid" : "j1K4WXbOFRXfm3srk9oMtZJ8Iop2",
          "name" : "a name"
        },
        "vtYlmyerugedizHyOW6TV847Be23" : {
          "email" : "an email",
          "pictureURL" : "a URL",
          "uid" : "vtYlmyerugedizHyOW6TV847Be23",
          "name" : "Rusty Shakleford"
        }
      },
      "format" : "field",
      "id" : "1",
      "type" : "text",
      "text" : "In a foot race, Jerry was neither first nor last. Janet beat Jerry, Jerry beat Pat. Charlie was neither first nor last. Charlie beat Rachel. Pat beat Charlie. Who came in last?"
    }

1 个答案:

答案 0 :(得分:0)

if let answeredByjson = json["answeredBy"].array {
    ...
}

生成一个数组[JSON],但您希望它生成一个字典[String: JSON]。这就是你收到的原因:

  

表情类型' [JSON]'在没有更多背景的情况下是模棱两可的

制作字典:

if let answeredByjson = json["answeredBy"].dictionary {
    ...
}

你不希望它产生字典[String: JSON]然后这条线没有意义

for (_, userDict) in answeredByjson {