Swift从JSON的键中获取值

时间:2019-06-16 13:27:33

标签: ios json swift

我有以下Json

  

{       “用户”:{           “年龄”:0,           “ _id”:“ 5d063d9fad424e0017e3113a”,           “ name”:“超人2”,           “ email”:“ super@hotmail.com”,           “ createdAt”:“ 2019-06-16T13:01:19.350Z”,           “ updatedAt”:“ 2019-06-16T13:01:19.471Z”,           “ __v”:1       },       “令牌”: “eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZDA2M2Q5ZmFkNDI0ZTAwMTdlMzExM2EiLCJpYXQiOjE1NjA2OTAwNzl9.DECWm1TgEevUmOqgIAklEPFnfno23QfaUvggqORlpZE”   }   问题是我不知道如何从“用户”获取_id或名称

我可以毫无问题地获得“令牌”。

let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in

    self.removeActivityIndicator(activityIndicator: myActivityIndicator)

    if error != nil
    {
        self.displayMessage(userMessage: "Could not successfully perform this request. Please try again later")
        print("error=\(String(describing: error))")
        return
    }


    //Let's convert response sent from a server side code to a NSDictionary object:
    do {
        let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary

        if let parseJSON = json {


            let userId = parseJSON["userId"] as? String
            print("User id: \(String(describing: userId!))")

            if (userId?.isEmpty)!
            {
                // Display an Alert dialog with a friendly error message
                self.displayMessage(userMessage: "Could not successfully perform this request. Please try again later")
                return
            } else {
                self.displayMessage(userMessage: "Successfully Registered a New Account. Please proceed to Sign in")
            }

        } else {
            //Display an Alert dialog with a friendly error message
            self.displayMessage(userMessage: "Could not successfully perform this request. Please try again later")
        }
    } catch {

        // Display an Alert dialog with a friendly error message
        self.displayMessage(userMessage: "Could not successfully perform this request. Please try again later")
        print(error)
           }
    }

    task.resume()

结果应显示_idname的值

1 个答案:

答案 0 :(得分:1)

您可以尝试

let res = try? JSONDecoder().decode(Root.self,from:data)

// MARK: - Empty
struct Root: Codable {
    let user: User
    let token: String
}

// MARK: - User
struct User: Codable {
    let age: Int
    let id, name, email, createdAt: String
    let updatedAt: String
    let v: Int

    enum CodingKeys: String, CodingKey {
        case age
        case id = "_id"
        case name, email, createdAt, updatedAt
        case v = "__v"
    }
}

OR

let json = try JSONSerialization.jsonObject(with: data!) as! [String:Any]
let user = json["user"] as! [String:Any]
print(user["_id"])
print(user["name"])