午睡 JSON 回应
Siesta JSON Response
我已经设置了一个 API 来给出如下 JSON 响应:
{
"key1": "success",
"key2": {
"int_val": 5,
"str_val": "email",
}
}
我已阅读 ,但仍然不明白如何正确访问 key1
。我试图通过 [String : Any]
解码转换器中的数据,这会抛出一个不明确的类型错误:"Type of expression is ambiguous".
那么如何在下面的代码中读取 Siesta 的响应?
service.resource("").request(.post, json: userJSON).onSuccess{ entity in
guard let data = entity.content as? Data else {
return
}
print(data)
}
你可以试试Decodable
struct Root:Decodable (
let key1:String
let key2:InnerItem
}
struct InnerItem:Decodable {
let intVal:Int
let strVal:String
}
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let res = decoder.decode(Root.self,from:data)
print(res.key1)
}
catch {
print(error)
}
将 Data 对象解析为代表您的 JSON 响应的 字典 。
let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String : Any]
if let key1 = json["key1"] as? String {
print(key1)
}
sample project included with Siesta has lots of example of configuring JSON decoding to models。例如,如果您有来自@Sh_Khan 的答案的 Root
和 InnerItem
类型:
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
service.configureTransformer(“/somepath") {
try jsonDecoder.decode([Root].self, from: [=10=].content)
}
与其他答案的重要区别在于 service.configureTransformer
的使用。配置转换器意味着它只被解析 一次 ,而不是每次使用它时都解析响应,并且每个人都会看到解析的结果——每个 onSuccess
,每个查看的人resource.latestData
等
我已经设置了一个 API 来给出如下 JSON 响应:
{
"key1": "success",
"key2": {
"int_val": 5,
"str_val": "email",
}
}
我已阅读 key1
。我试图通过 [String : Any]
解码转换器中的数据,这会抛出一个不明确的类型错误:"Type of expression is ambiguous".
那么如何在下面的代码中读取 Siesta 的响应?
service.resource("").request(.post, json: userJSON).onSuccess{ entity in
guard let data = entity.content as? Data else {
return
}
print(data)
}
你可以试试Decodable
struct Root:Decodable (
let key1:String
let key2:InnerItem
}
struct InnerItem:Decodable {
let intVal:Int
let strVal:String
}
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let res = decoder.decode(Root.self,from:data)
print(res.key1)
}
catch {
print(error)
}
将 Data 对象解析为代表您的 JSON 响应的 字典 。
let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String : Any]
if let key1 = json["key1"] as? String {
print(key1)
}
sample project included with Siesta has lots of example of configuring JSON decoding to models。例如,如果您有来自@Sh_Khan 的答案的 Root
和 InnerItem
类型:
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
service.configureTransformer(“/somepath") {
try jsonDecoder.decode([Root].self, from: [=10=].content)
}
与其他答案的重要区别在于 service.configureTransformer
的使用。配置转换器意味着它只被解析 一次 ,而不是每次使用它时都解析响应,并且每个人都会看到解析的结果——每个 onSuccess
,每个查看的人resource.latestData
等