/ / Как мога да конвертирам JSON обект в четлив swift обект? - json, swift, socket.io

Как мога да преобразувам JSON обект в четлив бърз обект? - json, бърз, 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]" в очаквания тип аргумент "Data"

Може ли някой, моля ръководство чрез как мога да конвертирате обект на данни, които получавам от сървъра за четене обект в бързо да бъде в състояние да достигне своите стойности?

Отговори:

0 за отговор № 1

Добавете квадратни скоби около обекта, който искате да създадете, вашият json е масив от (1) обекти, а не обект.

Опитайте тази:

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

(същото име на класа ви като множествено число без начален капитал е доста объркващо)


0 за отговор № 2

Получавате този масив в манипулатора за завършване, data е не от типа Data

let data : [Any]  = [["_id": "someRandomID",
"comment" : ["identifier" : "someRandomIdentifier",
"text" : "someRandomText"]
]
]

Да използвам Codable трябва да сериализирате масива в JSON

Това са вашите класове, съответстващи на конвенцията за именуване на Swift

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 съвместим

do {
let jsonData = try JSONSerialization.data(withJSONObject: data)
let decoder = JSONDecoder()
let addComments = try decoder.decode([AddComment].self, from: jsonData)
print(addComments[0])

} catch {
print(error)
}