使用Alamofire的JSON写入(_SwiftValue)中的类型无效
我已经尝试了很多东西,现在仍然得到: 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“JSON写入中的类型无效(_SwiftValue)” 更新: 我扫描条形码并保存信息:使用Alamofire的JSON写入(_SwiftValue)中的类型无效,json,swift,alamofire,swift3,swifty-json,Json,Swift,Alamofire,Swift3,Swifty Json,我已经尝试了很多东西,现在仍然得到: 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“JSON写入中的类型无效(_SwiftValue)” 更新: 我扫描条形码并保存信息: let calendar = Calendar.current let expiryDate = (calendar as NSCalendar).date(byAdding: .month, value: 3, to: Date(), options: [])?.descrip
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)
当我单击按钮时,我调用web服务,该服务以以下形式预测参数:
let testParams : Parameters =
[ "udid": "my_udid",
"data": jsonArray
]
jsonArray由如上所示的条形码数据对象数组组成
与web服务的通信如下所示:
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\"}"
]]
“数据”的json数组在jsonlint.com上进行验证,来自服务器的响应是json对象的形式,如:
{result: "Data successfully received"}
我认为需要用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
}
将此字符串附加到url中将请求中的编码从encoding:JSONEncoding.default更改为encoding:URLEncoding.default这些值参数和jsonArray是什么?尝试将响应中的\“替换为”JSON“Abdul:正如你在我编辑的帖子中看到的,ObjectMappers函数似乎正在添加斜杠(/)。据我所知,根据规范在JSON对象中添加斜杠是可以的。所以这不应该是问题所在,除非Alamofire不支持它。这会很奇怪,因为Alamofire经常与ObjectMapper一起使用,ObjectMapper实际上添加了斜杠符号。我将代码段包装在一个函数中,但结果只是添加了更多的斜杠:-(
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
}