响应更快 json
With swifter json response
我正在使用 swifter 库
和 swift 创建简单的休息 api
我如何响应 json 数据?
import Swifter
let server = HttpServer()
server["/hello"] = { request in
var userList:[Any] = []
for user in users {
var b : [String: Any] = [:]
b["name"] = user.name
b["id"] = user.id
userList.append(b)
}
return .ok(.json(userList))
}
但是有下面的错误信息
Serialization error: invalidObject
查看库源码,发现报错原因
...
//Library Source code
func content() -> (Int, ((HttpResponseBodyWriter) throws -> Void)?) {
do {
switch self {
case .json(let object):
guard JSONSerialization.isValidJSONObject(object) else {
throw SerializationError.invalidObject
}
let data = try JSONSerialization.data(withJSONObject: object)
return (data.count, {
try [=12=].write(data)
})
...
所以,我需要通过 guard JSONSerialization.isValidJSONObject(object) else {
此外,图书馆没有足够的文件,我该如何解决这个问题?
使用codable
和一个jsonEncoder
将users
数组转换为数据,然后将它们转换回jsonObject并传入:
do {
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(users)
let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
return .ok(.json(jsonObject))
} catch {
print(error)
return .internalServerError(.htmlBody("\(error.localizedDescription)"))
}
请注意,您应该考虑将错误返回给服务的调用者。我用过 .internalServerError
但你可以考虑返回一个更好的错误。
我正在使用 swifter 库
和 swift 创建简单的休息 api
我如何响应 json 数据?
import Swifter
let server = HttpServer()
server["/hello"] = { request in
var userList:[Any] = []
for user in users {
var b : [String: Any] = [:]
b["name"] = user.name
b["id"] = user.id
userList.append(b)
}
return .ok(.json(userList))
}
但是有下面的错误信息
Serialization error: invalidObject
查看库源码,发现报错原因
...
//Library Source code
func content() -> (Int, ((HttpResponseBodyWriter) throws -> Void)?) {
do {
switch self {
case .json(let object):
guard JSONSerialization.isValidJSONObject(object) else {
throw SerializationError.invalidObject
}
let data = try JSONSerialization.data(withJSONObject: object)
return (data.count, {
try [=12=].write(data)
})
...
所以,我需要通过 guard JSONSerialization.isValidJSONObject(object) else {
此外,图书馆没有足够的文件,我该如何解决这个问题?
使用codable
和一个jsonEncoder
将users
数组转换为数据,然后将它们转换回jsonObject并传入:
do {
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(users)
let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
return .ok(.json(jsonObject))
} catch {
print(error)
return .internalServerError(.htmlBody("\(error.localizedDescription)"))
}
请注意,您应该考虑将错误返回给服务的调用者。我用过 .internalServerError
但你可以考虑返回一个更好的错误。