Swift 4 如何将自定义对象数组转换为 JSON

Posted

技术标签:

【中文标题】Swift 4 如何将自定义对象数组转换为 JSON【英文标题】:Swift 4 How to transform array of custom objects to JSON 【发布时间】:2019-07-30 09:34:54 【问题描述】:

我正在构建参数以将其发送到服务器。所以我需要将我的自定义对象数组转换为 JSON。

试过这个:

let data = try? JSONSerialization.data(withJSONObject: fastForm.route, options: .prettyPrinted)
let str = String(bytes: data!, encoding: .utf8)!

从服务器获取错误为 each() 提供的无效

编辑: fastForm.route 是对象 Route 的数组 -> [Route]

struct Route: Codable 
    var latitude: String
    var longitude: String
    var waitingMinutes: String!
    var description: String!

【问题讨论】:

你能说说 fastFrom.route 的类型是什么吗? 去掉属性声明中的!,如果它们需要能够成为nil,则使它们成为普通的可选项 @mag_zbc,确实,只有当你在课堂上拥有后期初始化属性时才可以使用IUO(!)。否则:只使用适当的可选或非可选 【参考方案1】:

您可以使用以下结构将 json 发送到服务器

struct Route: Codable 
var latitude: String
var longitude: String
var waitingMinutes: String!
var description: String!

private enum CodingKeys: String, CodingKey 
    case latitude
    case longitude
    case waitingMinutes
    case description



func encodeData() -> Data? 
    let routes = [Route]()
    guard let data  = try? JSONEncoder().encode(routes) else  return nil 
    return data

然后您可以将编码的Data 放入您的URLRequest 中的httpBody

【讨论】:

正在崩溃。由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“JSON 写入中的类型无效(Foundation.__NSSwiftData)”这是我的请求:Alamofire.request(url,方法:.post,参数:参数,编码:JSONEncoding.default,标头:标头).responseJSON 打印响应(响应) 这必须在 httpBody 内,因为您使用的是发布请求。你可以关注这个参考***.com/a/28552198/4816590

以上是关于Swift 4 如何将自定义对象数组转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将自定义按钮集转换为响应对象?

如何使用 toDF() 将自定义 Java 类对象的 RDD 转换为 DataFrame?

如何在 swift 4 中的 UserDefalts 中设置自定义类数组数据

如何将自定义类型转换为原始类型?

Swift:如何将自定义 UICollectionViewCell 设置为圆形?

Typescript/Angular 12:将自定义对象转换为参数对象