Stringified JSON в Swift Object или JSON словарь - PullRequest
0 голосов
/ 19 сентября 2018

В своем коде Swift я делаю URLRequest для моего сервера node.js:

URLSession.shared.dataTask(with: checkoutRequest, completionHandler: {
    [weak self] (data: Data?, response: URLResponse?, error: Error?) in
    guard let data = data,
        let dataString = String(data: data, encoding: String.Encoding.utf8) else {
            return
    }

    // Help me!!!

}).resume()

node.js обрабатывает этот запрос, обрабатывая транзакцию через API проверки платежей Braintree.

checkoutProcessor.processCheckout(amount, nonce, (error, result) => {
    // Checkout callback
    if (error) {
        res.write(error.message)
        res.end()
    } else if (result) {
        console.log(result)
        res.write(JSON.stringify(result))
        res.end()
    }
})

Как обычно, если запрос API терпит неудачу (например, нет сигнала), он возвращает error, но если транзакция проходит , она возвращает result.

Тип result, однако, зависит от того, будет ли финансовая транзакция 1016 * неудачной или успешной:

Например, result для успешной транзакции:

Object {transaction: Transaction, success: true}

result для неудачной транзакции:

ErrorResponse {errors: ValidationErrorsCollection, params: Object, message: "Insufficient Funds", transaction: Transaction, success: false}

dataString выглядит так:

{\ "транзакция \": {\"идентификатор \": \ "m7mj3qd7 \", \ "статус \": суммы \ "USD \", \ ": \ "submitted_for_settlement \", \ "типа \": \ "продажа \", \ "currencyIsoCode \"\ ": \" 12,34 \», \ "merchantAccountId \": \ "yourpianobar \", \ "subMerchantAccountId \": нулевой, \ "masterMerchantAccountId \": нулевой, \ "OrderId \": нулевой, \ "createdAt \": \ "2018-09-19T03: 30: 27Z \", \ "updatedAt \": \ "2018-09-19T03: 30: 27Z \", \ "клиент \": {\ "идентификатор \": \»622865439 \ ", \" firstName \ ": \" Test \ ", \" lastName \ ": \" FromSwiftTest \ "

, который, безусловно, напоминает объект JSON, но я не могу его декодировать с помощью JSONDecoder, это не удается.(JSONEncoder также не работает)

Большинство решений, которые я вижу для Object, если преобразование строковых данных JSON в Swift включает в себя запись swift struct, с помощью которого можно отобразить все свойства объекта JSON, но поскольку это структура данныхрезультат неизвестен на быстром конце, я не знаю, что делать.

Как мне вставить эти объекты в мой быстрый код?

Примечание: я также пытался просто отправить res.send(result) в коде node.js, но это ничего не меняет.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете использовать класс JSONSerialization для ваших данных, чтобы преобразовать его из данных в словарь / массив, основываясь на вашем ответе json.Код может выглядеть примерно так (на основе моего понимания) в быстрой 4

URLSession.shared.dataTask(with: checkoutRequest) { (data, response, error) in
                guard let requestData = data, error == nil, let httpResponse = response as? HTTPURLResponse else {
                    // handle error
                    return
                }
                do {
                    if httpResponse.statusCode == 200 {
                        // success json
                        let jsonObject = try JSONSerialization.jsonObject(with: requestData, options: .allowFragments)
                        print(jsonObject) // jsonObject can be dictionary or Array. Typecast it based on your response
                    } else {
                        //error json
                        let jsonObject = try JSONSerialization.jsonObject(with: requestData, options: .allowFragments)
                        print(jsonObject) // jsonObject can be dictionary or Array. Typecast it based on your response
                    }
                }
                catch {
                    print(error.localizedDescription)
                }
            }.resume()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...