无法将 JSON 转换为正确的格式
Posted
技术标签:
【中文标题】无法将 JSON 转换为正确的格式【英文标题】:Cannot convert JSON to the correct format 【发布时间】:2015-08-20 06:10:45 【问题描述】:我想使用来自公共 Web 服务 https://api.rbp-zp.cz/1.3/services/district/ 的 JSON 输出,但在这种情况下,编码似乎存在问题。 AFNetworking 用于在这种情况下进行转换(通过特定的 respondSerializer),如下所示:
var op = AFHTTPRequestOperation (request: request)
op.responseSerializer = AFJSONResponseSerializer()
但由于 JSON 结构无效而失败。
我尝试过自己进行转换,但没有结果
let rObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(decodedData, options:.AllowFragments, error: nil)
当我手动将此 JSON 从浏览器放入验证器 http://jsonlint.com 时,它说它的格式不正确。
奇怪的是,当我将日志中的 JSON 消息放入验证器时,结构是有效的。
任何帮助将不胜感激。
【问题讨论】:
json 文本末尾的  符号是什么? @Shoaib 你告诉我 :) 这很可能是编码混乱 把json文本末尾的“”去掉那么就是合法的json就会被转换过来。 @Vanya 这个问题属于服务器端,但不知道你是否可以访问web服务代码。 @Shoaib 你确定它在服务器端吗?我无法访问那里,但我可以让他们知道这方面存在问题。只是想确定一下。 【参考方案1】:func convertStringToDictionary(text: String) -> [String:String]?
if let data = text.dataUsingEncoding(NSUTF8StringEncoding)
var error: NSError?
let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:String]
if error != nil
println(error)
return json
return nil
let str = "\"name\":\"James\""
let result = convertStringToDictionary(str) // ["name": "James"]
if let name = result?["name"] // The `?` is here because our `convertStringToDictionary` function returns an Optional
println(name) // "James"
在您的版本中,您没有将正确的参数传递给 NSJSONSerialization 并忘记转换结果。此外,最好检查可能的错误。最后一点:这仅在您的值是字符串时才有效。如果它可以是另一种类型,最好像这样声明字典转换:
let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:AnyObject]
当然你还需要改变函数的返回类型:
func convertStringToDictionary(text: String) -> [String:AnyObject]? ...
【讨论】:
谢谢,但事实并非如此,..我从服务器收到了错误的数据,想知道我是否可以对此采取任何措施。 用这个插件检查 crome chrome.google.com/webstore/detail/postman/…【参考方案2】:好的,所以解决方法是最后修剪那些有趣的字符,..不太喜欢它但有效
let range:NSRange = NSMakeRange(0, res.length - 3);
let refinedData:NSData = res.subdataWithRange(range)
let resObject = NSJSONSerialization.JSONObjectWithData(refinedData, options:NSJSONReadingOptions.allZeros, error: &error) as! NSArray
resObject 现在被正确填充为 NSArray
【讨论】:
以上是关于无法将 JSON 转换为正确的格式的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Json 转换为 NSDictionary? [关闭]