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

如何生成易读JSON字符串?求多行格式化JSON默认生成方法

生成格式化JSON字符串的最简方法

嘿,这个问题我太熟悉了!你现在拿到的单行JSON是因为接口返回的通常是压缩后的紧凑格式,直接转成String当然就是单行的。要生成带换行和缩进的易读JSON,最简的方式就是利用JSONSerialization的prettyPrinted选项,或者用JSONEncoder(如果你是从自定义模型生成的话)。

方法一:处理已有的Data(比如你的response.data)

先把原始Data解析成JSON对象,再重新序列化为带格式的Data,最后转成String就行:

if let jsonObject = try? JSONSerialization.jsonObject(with: response.data, options: []),
   let formattedData = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted),
   let resultString = String(data: formattedData, encoding: .utf8) {
    // 这里的resultString就是带换行和缩进的格式化JSON了
    print(resultString)
}

这里的关键是JSONSerialization.data(withJSONObject:options:)方法里的.prettyPrinted选项,它会自动帮你添加换行和4个空格的缩进,完全不用手动处理。

方法二:从自定义模型/集合生成格式化JSON

如果你是从自己的Swift模型(比如struct)或者字典、数组生成JSON,用JSONEncoder会更方便,同样设置outputFormatting为.prettyPrinted即可:

// 假设你有一个自定义模型
struct User: Codable {
    let name: String
    let age: Int
}

let user = User(name: "Vyacheslav", age: 30)
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted

if let formattedData = try? encoder.encode(user),
   let resultString = String(data: formattedData, encoding: .utf8) {
    print(resultString)
}

输出的结果会是:

{
    "name" : "Vyacheslav",
    "age" : 30
}

小提示

如果想要自定义缩进的空格数(比如用2个空格代替4个),在iOS 13+/macOS 10.15+之后,你可以额外设置encoder.outputFormatting.insert(.withoutEscapingSlashes)配合,但默认的4个空格已经足够满足大多数易读性需求了,没必要额外折腾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:19:43