gpt4 book ai didi

ios - swift parse json - 无法读取数据,因为它的格式不正确

转载 作者:行者123 更新时间:2023-12-02 01:32:14 35 4
gpt4 key购买 nike

这是结构可编码代码:

import Foundation

public struct TaskID: Codable {
let embedded: Embedded
}

public struct Embedded: Codable {
let task: [Task]
}

public struct Task : Codable {

let embedded: EmbeddedVariable
let id : String
let name: String
let assignee: String
let created: String
let processDefinitionId: String
}

public struct EmbeddedVariable: Codable {

let variable : [Variables]
}

public struct Variables: Codable {

let value : String
let name: String
}

我尝试过使用codingKey,也尝试过使用_embedded。面临同样的问题。

错误日志:由于错误而无法解码响应:

 Alamofire.AFError.
ResponseSerializationFailureReason.decodingFailed(error: Swift.DecodingError.typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil)))))

无法读取数据,因为格式不正确。

这是 JSONSerialization 的代码:

      // MARK: - URLRequestConvertible
func asURLRequest() throws -> URLRequest {
let url = try K.ProductionServer.baseURL.asURL()

var urlRequest = URLRequest(url: url.appendingPathComponent(path))
print(urlRequest)
// HTTP Method
urlRequest.httpMethod = method.rawValue

let authToken = UserDefaults.standard.string(forKey: "authToken")
let bearerToken: String = "Bearer " + (authToken ?? "")
print("baearer token::\(bearerToken)")

// Common Headers
urlRequest.setValue(ContentType.json.rawValue, forHTTPHeaderField: HTTPHeaderField.acceptType.rawValue)
urlRequest.setValue(ContentType.json.rawValue, forHTTPHeaderField: HTTPHeaderField.contentType.rawValue)
urlRequest.setValue(bearerToken, forHTTPHeaderField: HTTPHeaderField.authentication.rawValue)

// Parameters
if let parameters = parameters {
do {
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
} catch {
throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
}
}

return urlRequest
}

以下是 json 返回响应的代码:

   import Foundation
import Alamofire

public class APIClient {
@discardableResult
private static func performRequest<T:Decodable>(route:APIRouter, decoder: JSONDecoder = JSONDecoder(), completion:@escaping (AFResult<T>)->Void) -> DataRequest {

return AF.request(route)
.responseDecodable (decoder: decoder){ (response: AFDataResponse<T>) in
completion(response.result)
print("framework response::",response.result)
}
}

public static func taskID(id: String, completion:@escaping (AFResult<MyTaskData>)->Void) {

performRequest(route: APIRouter.TaskById(id: id), completion: completion)
}


}//APIClient

最佳答案

在 JSON 负载中,processDefinitionId 键的值末尾有一个额外的逗号。

尝试使用此 JSON Formatter 工具来验证 JSON:jsonformatter

"task":[
{
//...

"id": "412a2aca-06ae-11ea-8860-120ef5ab2c25",
"name": "Quick Evaluation",
"assignee": "demo",
"created": "2019-11-14T07:13:27.558+0000",
"processDefinitionId": "quickEvaluation:1:129ce2b1-0616-11ea-8860-120ef5ab2c25", // remove this coma(,) from this line

}

更新:

使用CodingKey作为_embedded。尝试以下方法

// MARK: - TaskID
struct TaskID: Codable {
let embedded: Embedded
let count: Int

enum CodingKeys: String, CodingKey {
case embedded = "_embedded"
case count
}
}

// MARK: - Embedded
struct Embedded: Codable {
let task: [Task]
}

// MARK: - Task
struct Task: Codable {
let embedded: EmbeddedVariable
let id, name, assignee, created: String
let processDefinitionID: String

enum CodingKeys: String, CodingKey {
case embedded = "_embedded"
case id, name, assignee, created
case processDefinitionID = "processDefinitionId"
}
}

// MARK: - EmbeddedVariable
struct EmbeddedVariable: Codable {
let variable: [Variable]
}

// MARK: - Variable
struct Variable: Codable {
let links: Links
let name, value, type: String
let valueInfo: ValueInfo

enum CodingKeys: String, CodingKey {
case links = "_links"
case name, value, type, valueInfo
}
}

// MARK: - Links
struct Links: Codable {
let linksSelf: SelfClass

enum CodingKeys: String, CodingKey {
case linksSelf = "self"
}
}

// MARK: - SelfClass
struct SelfClass: Codable {
let href: String
}

// MARK: - ValueInfo
struct ValueInfo: Codable {
}

关于ios - swift parse json - 无法读取数据,因为它的格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58872760/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com