Elegant way to view JSONEncode() output in swift
The encode()
method returns Data
containing the JSON representation in UTF-8 encoding. So you can just convert it back to a string:
var test = [String : String] ()test["title"] = "title"test["description"] = "description"let encoder = JSONEncoder()if let json = try? encoder.encode(test) { print(String(data: json, encoding: .utf8)!)}
Output:
{"title":"title","description":"description"}
With Swift 4, String
has a initializer called init(data:encoding:)
. init(data:encoding:)
has the following declaration:
init?(data: Data, encoding: String.Encoding)
Returns a
String
initialized by converting givendata
into Unicode characters using a givenencoding
.
The following Playground snippets show how to use String
init(data:encoding:)
initializer in order to print a JSON data content:
import Foundationvar test = [String : String]()test["title"] = "title"test["description"] = "description"let encoder = JSONEncoder()if let data = try? encoder.encode(test), let jsonString = String(data: data, encoding: .utf8) { print(jsonString)}/* prints: {"title":"title","description":"description"} */
Alternative using JSONEncoder.OutputFormatting
set to prettyPrinted
:
import Foundationvar test = [String : String]()test["title"] = "title"test["description"] = "description"let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrintedif let data = try? encoder.encode(test), let jsonString = String(data: data, encoding: .utf8) { print(jsonString)}/* prints: { "title" : "title", "description" : "description" } */