#ios #json #swift #iphone
Вопрос:
Я пытаюсь закодировать a [[String : String]]
во вложенные объекты JSON с JSONEncoder()
помощью .
Пример быстрого вывода:
[["firstName": "John", "lastName": "Doe"], ["firstName": "Tim", "lastName": "Cook"]]
Предполагаемый вывод JSON после кодирования:
[ { "firstName": "John", "lastName": "Doe" }, { "firstName": "Tim", "lastName": "Cook" } ]
Как бы я прошелся по этому массиву словарей, а затем закодировал его с JSONEncoder().encode()
помощью ? Большое спасибо!
Ответ №1:
JSONEncoder дает вам Data
по умолчанию. Чтобы вернуть его в String
форму, вы можете использовать это:
let input = [["firstName": "John", "lastName": "Doe"], ["firstName": "Tim", "lastName": "Cook"]] do { let json = try JSONEncoder().encode(input) print(String(decoding: json, as: UTF8.self)) } catch { print(error) }
Что дает:
[{«firstName»:»John»,»lastName»:»Doe»},{«firstName»:»Tim»,»lastName»:»Cook»}]
Ответ №2:
Используется Codable
для кодирования/декодирования данных JSON. Во-первых, преобразуйте JSON в подобный объект, это упростит задачу, если вы добавите больше полей:
struct Person: Codable { var firstName: String var lastName: String }
Предположим, что у вас есть Person
массив
var persons = [Person]() persons.append(.init(firstName: "John", lastName: "Doe")) persons.append(.init(firstName: "Tim", lastName: "Cook")) //PRINT OUT let jsonData = try! JSONEncoder().encode(persons) let jsonString = String(data: jsonData, encoding: .utf8)
И это результат:
«[{«firstName»:»John»,»lastName»:»Doe»},{«firstName»:»Tim»,»lastName»:»Cook»}]»