Dmi*_*try 8 json pretty-print swift
我有 json 数据来自服务器端。
如果我使用下一个代码,我不会打印出漂亮的一行字符串:
print(String(bytes: jsonData, encoding: String.Encoding.utf8))
Run Code Online (Sandbox Code Playgroud)
为了使它打印得漂亮,我使用了下一个代码:
if let json = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) {
if let prettyPrintedData = try? JSONSerialization.data(withJSONObject: json, options: .prettyPrinted) {
print(String(bytes: prettyPrintedData, encoding: String.Encoding.utf8) ?? "NIL")
}
}
Run Code Online (Sandbox Code Playgroud)
但似乎这不是最好的方法。
那么有人知道如何漂亮地打印传入的 jsonData 来打印它吗?
Har*_*ris 19
你所拥有的稍微漂亮的版本:
if let json = try? JSONSerialization.jsonObject(with: data, options: .mutableContainers),
let jsonData = try? JSONSerialization.data(withJSONObject: json, options: .prettyPrinted) {
print(String(decoding: jsonData, as: UTF8.self))
} else {
print("json data malformed")
}
Run Code Online (Sandbox Code Playgroud)
mnl*_*mnl 14
直接使用编码器上的输出格式化选项:
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
Run Code Online (Sandbox Code Playgroud)
小智 10
基本上在 Swift 中存在两种类型的字符串:String和NSString
第二种是较旧的(甚至在 Objective-C 中也使用),现在更常使用较新的String类型。然而,NSString允许你漂亮地打印现有的字符串,这意味着 f.ex. 反斜杠将被自动删除。
对于这种情况,我使用这样的助手:
extension Data {
var prettyString: NSString? {
return NSString(data: self, encoding: String.Encoding.utf8.rawValue) ?? nil
}
}
Run Code Online (Sandbox Code Playgroud)
使用 NSString 而不是 String 类型非常重要。
或者,您可以对 String 进行操作,但最终将其转换为 AnyObject,如下所示:
String(data: stringData, encoding: .utf8)! as AnyObject
Run Code Online (Sandbox Code Playgroud)
控制台中的结果如下所示(服务器响应的示例):
{
"message" : "User could not log in",
"errorCode" : "USER_COULD_NOT_LOG_IN",
"parameters" : null
}
Run Code Online (Sandbox Code Playgroud)
要美化任何字符串,您可以使用上面的第二种方法,因此将 String 转换为 AnyObject。它还会让绳子看起来更好。F.例如:
let myStr: String = ...
print(myStr as AnyObject)
Run Code Online (Sandbox Code Playgroud)
斯威夫特 5 及以上
方便地将数据扩展为漂亮打印的 JSON
extension Data {
func printJson() {
do {
let json = try JSONSerialization.jsonObject(with: self, options: [])
let data = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
guard let jsonString = String(data: data, encoding: .utf8) else {
print("Inavlid data")
return
}
print(jsonString)
} catch {
print("Error: \(error.localizedDescription)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用:
let json = """
{
"id": 1,
"name": "Steve Jobs",
"username": "Steve",
"email": "jobs@apple.com",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "San Jose",
"zipcode": "1234-5678"
},
"phone": "1-770-736-8031 x56442"
}
"""
let jsonData = Data(json.utf8)
// log json data in pretty format
jsonData.printJson()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5945 次 |
| 最近记录: |