Node.jsを実行しているサーバーでJSONオブジェクトを適切な形式で取得する際に問題が発生します。 JSONオブジェクトを受け取ってデータベースに格納するAPIを設定しました。これはpostmanからのPOSTリクエスト(下に示す)を送信すると効果的ですが、iOSから送信すると奇妙なエラーが発生します。例として:Swift 3で適切にJSONオブジェクトをフォーマットする
示す第JSONオブジェクトは、郵便配達から送られてきます。 2番目はiOS(Swift 3を使用)からのものです。
AssertionError: Error: key {"firstname":"testFirstName","lastname":"testLastName","email":"[email protected]","username":"testusername123", == null
私はこのような場合は、なぜ正確にはわからない:エラーは、本質的に言って、サーバーがクラッシュします。私はオブジェクトが作成される方法と関係があると仮定します。これは、私がオブジェクトを作成するために使用している迅速なコードです:
let infoDictionary = [
"username": UserNameField.text!,
"password": PasswordField.text!,
"firstname": FirstNameField.text!,
"lastname": LastNameField.text!,
"email": EmailField.text!
]
// Whole block = send above dictionary as JSON to server:
if JSONSerialization.isValidJSONObject(infoDictionary) {
do {
let jsonObject = try JSONSerialization.data(withJSONObject: infoDictionary,
options: .prettyPrinted)
私はそれをhttpボディに追加します。このフィールドは、アプリのUIのテキストフィールドからのもので、私がアンラップして辞書に配置していることに注意してください。私はそれを素早く文字列として印刷すると、正しいフォーマットとして出てきます。実際に私のサーバに送信するときに間違っていることがあります。
EDIT:要求ごとの完全なURL要求は以下の通りです:
do {
let jsonObject = try JSONSerialization.data(withJSONObject: infoDictionary,
options: .prettyPrinted)
// Create Post request
let url = URL(string: "websiteurl")
var request = URLRequest(url: url!)
request.httpMethod = "POST"
// Append JSON object
request.httpBody = jsonObject
// Send request
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No Data")
return
}
let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
if let responseJSON = responseJSON as? [String: Any] {
print(responseJSON)
}
}
task.resume() // Sends the request
} catch {
print(error.localizedDescription)
}
}
それはあなたがjsonObject AlamoFireにinfoDictionaryを渡し、しないように持っていることだろうか? –
私はAlamoFireを使用していないので、URLリクエスト/ URLSessionを使用してHTTPリクエストを手動で行います。そこで、URLRequestを使用してリクエストを作成し、そのリクエストの本体にjsonオブジェクトを追加します。 –
申し訳ありません!私はどこかで "AlamoFire"を読んだと思った。なぜか分からない。しかし、とにかく:あなたのjsonObjectは別のJSON文字列にラップされているようです。 URLRequestの作成方法をコードに追加してください。 –