swift - 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)”
我不知道我的自定义类型有什么问题,因为它是可编码的。
如何使用我的函数解析我的数组而不引发错误?
解决方案
您应该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."
}
*/
推荐阅读
- spring - Spring 方法级别安全性获取 null 属性 EL1007E:在 null 上找不到属性或字段“价格”
- php - 我想删除重复的``````如果它们是连续的但我的条件“if($value ===”“)”不起作用
- excel - 基于单元格的 VBA 条件格式 .rank 值 - Top10
- webhooks - DialogFlow 文件上传到服务器
- javascript - 数组是否未定义,因为组件在加载数据之前正在渲染?
- ios - iOS 13 如何在导航栏中隐藏 UISearchController 搜索栏
- scala - 在没有 Request 实例的情况下播放反向路由
- .net - .Net 5 发布后,.Net Core 3 网站会发生什么?
- python - 如何正确添加两个 numpy 数组?
- node.js - 如何解决 Mongoose 验证错误