2017-05-02 8 views
0

URLSessionを使用してiOSデバイスからJSONを送信しています。私が送信しています:iOSからJSONを解析するNode.js URLセッションのセッション

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() 

を私はその直後体を印刷する場合、私は有効なJSONを取得する実行します。

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

次に、サーバ側nodejsに、私は次のコード(ノードを持っていますか、 Javascriptを)私のメインのドメインではありません。

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

私の質問は、なぜそれがJSON keyに、元のJSONを追加して、どのようにそれを避けることができますか?

使用方法JSON.parseは、穴を取得すると機能しません。JSONは空の値のキーです(例)。

答えて

0

そこにはtoJSON()メソッドがありますか?あなたはそれを2回ストリングしているように見えます。何らかの理由で、そのメソッドは辞書にラップしています。どこでもtoJSON()を呼び出す(も内蔵されていることスウィフト方法である)する必要がないことを

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() 

注意:ここで

が完了、作業遊び場スニペットです。

Requestb.inの応答:

+0

申し訳ありませんが明らかになりません。 'toJSON()'はカスタムメソッドで、 '[String:Any]'辞書を返します。あなたのスニペットを見て、直接ディクテーションを再現しようとします。ありがとうございました – aramusss

+0

それはまさにその問題のようです。あなたはすでに 'JSONSerialization.data()'を介して要求本体をストリング化しています。それを2回する必要はありません。 – brandonscript