2017-05-02 10 views
0

Senden eines JSON von einem iOS-Gerät mit URLSession. Ich schicke:Node.js JSON von iOS URLSession body

let body = try? JSONSerialization.data(withJSONObject: order.toJSON()) 
// { "customer": 123 } 
request.httpBody = body 
request.httpMethod = "POST" 
URLSession.shared.dataTask(with: request) { (data, response, error) in 
    ... 
}.resume() 

Wenn ich den Körper nur danach zu drucken, ich eine gültige JSON erhalten:

print(String(data: request.httpBody!, encoding: .utf8)!) 
// {"customer":123} 

Dann in der Server-Seite nodejs Ich habe den folgenden Code (Knoten oder Javascript sind nicht meine Hauptdomain):

module.exports = function (ctx, req, res) { 
    console.log(ctx.body) 
    // { '{"customer": 123}': '' } 
    ... 

Meine Frage ist, warum es die ursprüngliche JSON JSON hinzugefügt wird key und wie sie vermieden werden?

Die Verwendung von JSON.parse funktioniert nicht, da es das Loch erhält JSON ist ein Schlüssel eines leeren Werts (wie im Beispiel).

Antwort

0

Was ist die toJSON() Methode, die Sie dort verwenden? es sieht für mich aus, als würden Sie es zweimal stringieren, und aus irgendeinem Grund verpackt diese Methode es in ein Wörterbuch.

ist der komplette, Arbeits Spielplatz Schnipsel:

import UIKit 
import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 

let url = URL(string: "http://requestb.in/<<your-requestbin-key>>") 
var request = URLRequest(url: url!) 
let order = ["customer": 123] 
let body = try? JSONSerialization.data(withJSONObject: order) 

request.httpBody = body 
request.httpMethod = "POST" 
URLSession.shared.dataTask(with: request) { (data, response, error) in 
    print(response!) 
}.resume() 

Beachten Sie, dass gibt es keine Notwendigkeit toJSON() überall anrufen (noch ist, dass eine Swift-Methode in-built).

Requestb.in Antwort:

+0

Leider nicht klar sein. 'toJSON()' ist eine benutzerdefinierte Methode, gibt ein '[String: Any]' Wörterbuch zurück. Ich werde einen Blick auf Ihr Snippet werfen und versuchen, das Diktat direkt zu codieren, danke – aramusss

+0

Nun, sieht so aus, als wäre das Problem genau dort. Sie stringieren den Anfragetext bereits über 'JSONSerialization.data()'. Keine Notwendigkeit, es zweimal zu tun. – brandonscript