首页 > 解决方案 > Swift Invalid type in JSON write error using JSONSerialization.data

问题描述

我有一个包含自定义类型元素的数组。这是类型:

public class RequestElemDataBody: Codable {
    public var name: String
    public var value: String

    public init(name: String, value: String) {
        self.name = name
        self.value = value
    }
}

这就是我声明我的数组的方式:

var elementsInForm = [RequestElemDataBody]()

我使用一个函数将此数组转换为 Data 然后转换为 String :

func json(from object: [Any]) -> String? {
    guard let data = try? JSONSerialization.data(withJSONObject: object, options: []) else {
        return nil
    }
    return String(data: data, encoding: String.Encoding.utf8)
}

执行时我收到此错误消息:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“JSON 写入中的类型无效(Data.RequestElemDataBody)”

我不知道我的自定义类型有什么问题,因为它是可编码的。

如何使用我的函数解析我的数组而不引发错误?

标签: swiftmoya

解决方案


您应该JSONEncoder在序列化时使用Codable.

文档页面中的示例:

struct GroceryProduct: Codable {
    var name: String
    var points: Int
    var description: String?
}

let pear = GroceryProduct(name: "Pear", points: 250, description: "A ripe pear.")

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted

let data = try encoder.encode(pear)
print(String(data: data, encoding: .utf8)!)

/* Prints:
 {
   "name" : "Pear",
   "points" : 250,
   "description" : "A ripe pear."
 }
*/

推荐阅读