使用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是空值的键(作为示例)。
答案 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的回复: