反馈json格式错误
Posted
技术标签:
【中文标题】反馈json格式错误【英文标题】:Feedback json format wrong 【发布时间】: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 库
【参考方案1】:
你可以试试这个吗?
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
if let returnData = String(data: data!, encoding: .utf8)
print(returnData)
else
print("Invalid Data Coming")
do
let data = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject]
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.
我已更新代码并尝试从您的数据中获取字符串信息。您能告诉我打印值中显示的内容吗?
您能说出您发送的确切 URL 和 JSON 吗?我将据此更新答案。希望有意义
String 得到Invalid Data Coming
,json 得到The data couldn't be read because it isn't in the correctt format
。我认为导致格式不正确的原因之一是name
的值是中文单词,在android中我使用BIG5读取反馈然后我可以得到值。
在 JSON 格式中没有类似的东西。为什么不呢,你用 almanofire 来完成同样的任务以上是关于反馈json格式错误的主要内容,如果未能解决你的问题,请参考以下文章
springboot统一返回json数据格式并配置系统异常拦截
DandelionException:文件'resources/.......json'格式错误