You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组切片JSONSerialization序列化报错Thread 1: signal SIGABRT如何解决?

如何序列化Swift数组切片到JSON?

嘿,这个问题我之前踩过坑!你遇到的Thread 1: signal SIGABRT错误,核心原因是**JSONSerialization不支持直接序列化ArraySlice类型**。

为什么会报错?

JSONSerialization.data(withJSONObject:)方法要求传入的对象必须是JSON规范支持的顶层类型,比如:

  • Array
  • Dictionary
  • 基础类型(String、Number、Bool、Nil)

而ArraySlice是数组的一个"视图",它并不是标准的Array类型,所以不在JSON序列化的支持列表里,直接传入就会触发崩溃。

解决方法:把切片转换成标准Array

只需要用Array()初始化器把ArraySlice转换成真正的Array,再传入序列化方法就可以了。修改你的代码如下:

let array = [1,2,3,4,5,6]
let arraySlice = array[1...3]
// 把切片转为Array
let convertedArray = Array(arraySlice)
// 现在可以正常序列化了
if let jsonData = try? JSONSerialization.data(withJSONObject: convertedArray, options: .prettyPrinted),
   let jsonString = String(data: jsonData, encoding: .utf8) {
    print(jsonString)
}

运行这段代码,你会得到正确的JSON输出:

[
  2,
  3,
  4
]

小提示

虽然ArraySlice和Array共享很多方法,但它的设计是为了高效访问数组的子序列,而不是作为独立的集合类型用于序列化、存储等场景。所以在需要和外部系统(比如JSON)交互时,记得先转换成标准的Array或者Dictionary哦。

内容的提问来源于stack exchange,提问作者Ramesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:52:26