【发布时间】:2017-12-27 12:14:33
【问题描述】:
这是我的反馈 json 字符串:
{"name":"abc", "cardNumber":"1234567890", "data": [{A data},{B data}...]}
我用这个函数发送数据,然后获取json和encode:
func uploadData(word:String){
var request = URLRequest(url: url!, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 30)
request.httpMethod = "POST"
request.httpBody = word.data(using: .utf8)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let session = URLSession(configuration: URLSessionConfiguration.default)
session.dataTask(with: request, completionHandler: {(data, response, error) in
if let data = data{
do{
let data = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)
print(data) //I want to know what is this so I print
}catch{
print(error.localizedDescription)
}
}
}).resume()
}
但控制台总是说:The data couldn't be read because it isn't in the correct format
JSONObject.getJSONArray("myValue")...,这个json可以在android中格式化和读取
我尝试使用print(data)(没有json编码)来显示反馈中是否有任何数据,并且我在控制台中得到400字节,所以我确定有数据发回给我。
更新 12/28:
{"name":"abc",
"cardNumber":"1234567890",
"data": [{day:20171228, time: 09:10:11},
{day:20171226, time: 20:00:12},
{day:20171227, time: 15:30:22}
]
}
我确定这个json可以在android中读取,我使用的接收方和发送方是vb.net,它使用sendingString = JsonConvert.SerializeObject(JSONClass)变成json字符串,然后转换成字节发送出去。
name的值是中文单词,其他值是英文和数字,只有name不可读,现在我正在检查哪个String.Encoding可以工作,然后如果我编码成功,我会尝试格式化为 json 数组。
【问题讨论】:
-
你能打印完整的 JSON 吗?
-
您确定您的网络服务返回正确的 JSON 格式吗?我的意思是您是获得成功结果还是返回任何其他数据(错误字符串?)
-
@MidhunMP 我尝试使用 String 来获取反馈将返回 nil,还有一件有趣的事情我仍然无法找出为什么会发生这种情况:如果我使用
seesion.uploadTask和 @987654332 @ ,我可以得到反馈并阅读,但是结果是{"name":, "cardNumber":, "data":},json中没有任何值,直到这个,我仍然无法弄清楚为什么下载会发送未知数据来请求下载... -
@SucharuHasija 我更新了完整的 json 字符串,谢谢~
-
这是因为你的 JSON 实际上是无效的。
day和time键应该被引用,就像这样{"day": "20171228", "time": "09:10:11"}不同的 JSON 解析器对数据施加不同的有效性检查。如果你不能改变服务器,你最好的办法是找到一个可以接受这个无效数据的 JSON 库