ошибка при попытке отправить [JSON] как значение параметра в Мойе - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь опубликовать http-запрос, и мне приходится иметь дело с вложенным json.

Я пытался отправить свой параметр как

[[String: Any]] 

и

[JSON]

, но я получаю ошибку в обеих ситуациях.

этомой код:

var accountTitlesForNewProject = [JSON]()
for indexCounter in 0 ..< self.accountTitles.count {
    let _accountTitle = self.accountTitles[indexCounter]
    if !isChecked[indexCounter] {
        continue
    }

    var _accountTitleJSON = JSON()
    _accountTitleJSON["name"] = _accountTitle["name"]
    _accountTitleJSON["description"] = _accountTitle["description"]
    var _codes = [JSON]()
    for (_, _code) in _accountTitle["accounting_codes"] {
        let _codeJSON = JSON(dictionaryLiteral: ("type", _code["type"]), ("code", _code["code"]), ("level", _code["level"]))

        _codes.append(_codeJSON)
    }
    _accountTitleJSON["accounting_codes"] = JSON(_codes)
    accountTitlesForNewProject.append(_accountTitleJSON)
}

print(accountTitlesForNewProject)
self.addProject(projectName: projectName, stateId: stateId, cityId: cityId, accountTitles: accountTitlesForNewProject, successHandler: successHandler)

это результат печати:

[{"accounting_codes" : [
    {"level" : 1,
     "type" : 1,
     "code" : "694"
    }, 
    {"level" : 2,
     "type" : 1,
     "code" : "312"
    },
    {"level" : 3,
     "type" : 1,
     "code" : "336"
    }],
  "name" : "بنفشه صفوی",
  "description" : "لابد حرف و سخنی و خنده‌ای و رفت. کنه‌ای بود. درست یک پیرمرد. یک ساعت به ماهی سه چهار هفته بیش‌تر دوام نکرد.."
}, 
{"accounting_codes" : [
    {"level" : 1,
     "type" : 1,
     "code" : "977"
    },
    {"level" : 2,
     "type" : 1,
     "code" : "568"
    },
    {"level" : 3,
     "type" : 1,
     "code" : "178"
    }],
   "name" : "آزاده میرزاده",
  "description" : "و دیگه خسته شده‌ام. دلم می‌خواد قضیه به همین سادگی تمام می‌شود. و بعد چند سال سابقه دارد و چند نفری از اولیای."
}]

и это функция addProject, где возникает проблема:

private func addProject(projectName: String, stateId: Int, cityId: Int, accountTitles: [JSON], successHandler: @escaping (String) -> ()) {
    let authenticator: TGAccessTokenProvider = TGOpenAuthentication.getTGOpenAuthenticator()
    authenticator.getAccessToken(successHandler: { (_accessToken) in
        self.projectProvider.request(.store(accessToken: _accessToken, projectName: projectName, stateId: stateId, cityId: cityId, accountTitles: accountTitles), completion: { ... 
}

Я получил ошибку, когдавыполняется self.projectProvider.request, и это сообщение об ошибке:

«Завершение приложения из-за необработанного исключения« NSInvalidArgumentException », причина:« Неверный тип в записи JSON (_SwiftValue) »»

проблема

1 Ответ

0 голосов
/ 27 декабря 2018

как уже упоминалось здесь , я решил свою проблему таким образом, потому что мое свойство объекта определено как:

private var accountTitles = [JSON]()

, так что это рабочий код:

var accountTitlesForNewProject = [Any]()
for indexCounter in 0 ..< self.accountTitles.count {
    let _accountTitle = self.accountTitles[indexCounter]
    if !isChecked[indexCounter] {
        continue
    }

    var _codes = [Any]()
    for (_, _code) in _accountTitle["accounting_codes"] {
        let _codeJSON: [String: Any] = ["type": _code["type"].intValue,
                                        "code": _code["code"].stringValue,
                                        "level": _code["level"].intValue]
        _codes.append(_codeJSON)
    }

    let _accountTitleJSON: [String: Any] = ["name": _accountTitle["name"].stringValue,
                                            "description": _accountTitle["description"].stringValue,
                                            "accounting_codes": _codes]

    accountTitlesForNewProject.append(_accountTitleJSON)
}
...