Swift:如果将JSON响应包装在一个数组中,如何从服务器解析它?

时间:2017-06-24 03:25:06

标签: arrays json swift

Swift n00b在这里。

我从服务器得到这样的回复:

[
  {
    "foo": [], 
    "bar":"asdf",
    ...
  }
]

现在我了解了如何解析常规JSON,但是当它有一个数组作为基本元素时却没有。

这是我到目前为止使用的代码,它适用于常规JSON:

let task = session.dataTask(with: urlRequest) {
    (data, response, error) in

    // check for any errors
    guard error == nil else {
    print("error calling POST on \(String(describing: urlRequest.url?.absoluteURL))")
       print(error!)
       return
    }

    // make sure we got the data
    guard let responseData = data else {
        print("Error: did not receive data")
        return
    }

    let responseString = String(data: responseData, encoding: String.Encoding.utf8) as String!

    // parse the result as JSON, since that's what the API provides
    do {
        guard let todo = try JSONSerialization.jsonObject(with: responseData, options: [])
            as? [String: Any] else {
                print("error trying to convert data to JSON")
                return
        }

        ... // do whatever with the response

    } catch {
        print("an error occurred")
        return
    }
 }

task.resume()

我从中得到的错误是"尝试将数据转换为JSON时出错。

解析我能想到的响应的最简单方法是从1到长度为1的子串,然后解析它,但这似乎并不特别安全。

我有什么方法可以将该回复解析为[Dictionary]

1 个答案:

答案 0 :(得分:1)

您的JSON是常规JSON。顶层的数组与字典一样有效(和常规)。

只需相应更新您的演员阵容:

guard let todo = try JSONSerialization.jsonObject(with: responseData, options: [])
    as? [[String: Any]] else {

这表明你有一个字典数组。现在,您可以根据需要迭代数组并获取每个字典。