我现在已经尝试了很多东西,现在仍在: 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'JSON写入中的无效类型(_SwiftValue)'
更新: 我扫描条形码并保存信息:
let calendar = Calendar.current
let expiryDate = (calendar as NSCalendar).date(byAdding: .month, value: 3, to: Date(), options: [])?.description
let barcode = BarcodeData(barcodeValue: value,
datetime: dateTime,
expiryDate: expiryDate!,
latitude: latitude.description,
longitude: longitude.description,
status: txtStatus.text!,
type: txtType.text!,
extraText: "")
然后将对象映射到JSON字符串,似乎斜杠(/)由此函数添加:
let jsonBarcode = Mapper<BarcodeData>().toJSONString(barcode)
然后将条形码添加到String:
列表中barcodeDataList.append(jsonBarcode)
当我点击一个按钮时,我调用了Web服务,它以下列形式预测参数:
let testParams : Parameters =
[ "udid": "my_udid",
"data": jsonArray
]
jsonArray由一个BarcodeData对象数组组成,如上所示。
与网络服务的通信如下:
Alamofire.request(url, method: .post, parameters: testParams, encoding: JSONEncoding.default).validate().responseJSON { response in
switch response.result {
case .success:
print("Validation successful")
if let json = response.result.value {
print("JSON: \(json)")
}
case .failure(let error):
print("Error: \(error)")
}
}
以下内容传递给ws:
["udid": "\"001-my_udid\"", "data": [
"{\"latitude\":\"0.0\",\"status\":\"Empty\",\"datetime\":\"2016-09-20 05:10\",\"longitude\":\"0.0\",\"type\":\"ABC123\",\"barcodevalue\":\"123456\"}"
]]
“data”的json数组在jsonlint.com验证,服务器的响应采用json对象的形式,如:
{result: "Data successfully received"}
答案 0 :(得分:1)
将请求中的编码从编码:JSONEncoding.default更改为编码:URLEncoding.default
答案 1 :(得分:0)
我认为你需要在json对象中对你的数组进行编码试试这样的
do{
let data = try NSJSONSerialization.dataWithJSONObject(mappingArray, options: NSJSONWritingOptions(rawValue: 0))
let mappedString : String = (String(data: data , encoding: NSUTF8StringEncoding)!)
return mappedString
}
catch{
print(error)
return error as! String
}
使用您的网址
附加此字符串