YeahGarage
@YeahGarage
Developer

Как правильно распарсить коллекцию Json?

Приветствую

Подскажите, как оптимально добраться до значений "Body"

Json это выглядит так (Так он уходит с сервера .net):
{
	"isOk":true,
	"result":"[
	{
		"Name":"file0",
		"Size":93316,
		"MimeType":"image/jpeg",
		"Body":"/9j/4QAYRXIDIwMTAvM..."
	},
	{
		"Name":"file1",
		"Size":146597,
		"MimeType":"image/jpeg",
		"Body": "/9j/4AAQSkZJRgABAgAAA.."
	]",
	"errorMessage":null
}


Но через
Alamofire.request(postURL, method: .post, parameters: parameters, encoding: URLEncoding.default).responseJSON { response in
            switch response.result {
                case .success:
                    if let result = response.result.value {
                         print("\n result:", result)
}
}
}


Я его получаю в другом порядке, и иногда этот порядок меняется
{
  "errorMessage" : null,
  "isOk" : true,
  "result" : "[{\"Name\":\"file0\",\"Size\":70123,\"MimeType\":\"image\/jpeg\",\"Body\":\"\/9j\/4AAQSkZJRgA....}]
}


Путь к массиву
guard let jsonResponse = response.result.value as? NSDictionary else { return }
                    if jsonResponse["result"] != nil {
                        let res = String(describing: jsonResponse["result"]!)
}


Хотелось бы все сделать через SwiftyJson, но через него не могу дойти к массивам
if let value = self.json["errorMessage"]["isOk"]["result"][].array {
          print("\n value  \(value)")
}
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 2
ivanvorobei
@ivanvorobei
iOS разработчик, канал https://t.me/sparrowcode
Я его получаю в другом порядке, и иногда этот порядок меняется

JSON не гарантирует порядок доставки элементов массива. Вам нужно добавить правило сортировки.

Хотелось бы все сделать через SwiftyJson

Через SwiftyJSON нужно получить массив, выглядит это будет так:
json["result"].arrayValue
Ответ написан
@almas73
Я бы посоветовал Codable protocol

let json = "{\"isOk\":true,\"result\":[{\"Name\":\"file0\",\"Size\":93316,\"MimeType\":\"image/jpeg\",\"Body\":\"/9j/4QAYRXIDIwMTAvM...\"},{\"Name\":\"file1\",\"Size\":146597,\"MimeType\":\"image/jpeg\",\"Body\":\"/9j/4AAQSkZJRgABAgAAA..\"}],\"errorMessage\":null}"

let data = json.data(using: .utf8)!

struct APIResponse: Decodable {
    let isOk: Bool
    let result: [Item]
    let errorMessage: String?
    
    struct Item: Decodable {
        let name: String
        let size: Double
        let mimeType: String
        let body: String
        
        enum CodingKeys: String, CodingKey {
            case name = "Name"
            case size = "Size"
            case mimeType = "MimeType"
            case body = "Body"
        }
    }
}

let response = try! JSONDecoder().decode(APIResponse.self, from: data)
print(response)

// Output:
// APIResponse(isOk: true, result: [__lldb_expr_33.APIResponse.Item(name: "file0", size: 93316.0, mimeType: "image/jpeg", body: "/9j/4QAYRXIDIwMTAvM..."), __lldb_expr_33.APIResponse.Item(name: "file1", size: 146597.0, mimeType: "image/jpeg", body: "/9j/4AAQSkZJRgABAgAAA..")], errorMessage: nil)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы