如何生成易读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
相关产品推荐
相关产品推荐

