Node.js从iOS URLSession体中解析JSON

时间:2017-05-02 18:09:39

标签: ios json node.js swift

使用URLSession从iOS设备发送JSON。我发送:

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添加到JSON key以及如何避免它?

使用JSON.parse不起作用,因为它获取漏洞JSON是空值的键(作为示例)。

1 个答案:

答案 0 :(得分:0)

您在那里使用的toJSON()方法是什么?它看起来像是你将它串起来两次,并且出于某种原因,该方法将它包装在字典中。

这是一个完整的,有效的Playground代码段:

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

请注意,无需在任何地方调用toJSON()(也不是内置的Swift方法)。

Requestb.in的回复: