如何将JSON对象转换为可读的swift对象?

时间:2017-12-07 11:25:52

标签: json swift socket.io

这是我从服务器收到的JSON数据:

[{
    "_id": someRandomID;
    comment = {
        identifier = someRandomIdentifier;
        text = someRandomText;
    };
}]

我正在使用socket.io,我从socket.on()获取数据,如下所示:

socket?.on("add-comment") {data, ack in
   print(data)
}

我尝试为它创建一个类,如下所示:

class addComment: Codable {
let _id: String
let comment: comments
}

class comments: Codable {
    let identifier: String
    let text: String

    init(identifier: String, text: String) {
        self.identifier = identifier
        self.text = text
    }
}

并在socket.on中添加了以下代码:

socket?.on("add-comment") {data, ack in
    let decoder = JSONDecoder()
    let comment = decoder.decode(addComment.self, from: data)
}

它向我展示了以下内容:

  

无法转换类型' [Any]'预期参数类型'数据'

任何人都可以指导我如何将我从服务器收到的数据对象转换为swift中的可读对象,以便能够访问其值?

2 个答案:

答案 0 :(得分:0)

您在完成处理程序中获取此数组,data {<1}}

Data

要使用let data : [Any] = [["_id": "someRandomID", "comment" : ["identifier" : "someRandomIdentifier", "text" : "someRandomText"] ] ] ,您需要将数组序列化为JSON

这些是符合Swift命名约定的类

Codable

这是使数组class AddComment: Codable { private enum CodingKeys : String, CodingKey { case id = "_id", comment } let id: String let comment: Comment } class Comment: Codable { let identifier: String let text: String } 符合

的方法
Codable

答案 1 :(得分:0)

在要创建的对象周围添加方括号,json是(1)对象的数组,而不是对象。

试试这个:

let comments = decoder.decode([addComment].self, from: data)

(同样,你的班级名称为复数而没有启动资金,这非常令人困惑)